ORACLE RMAN备 份及还原

coolpengok

贡献于2015-03-27

字数:7749 关键词: Oracle 数据库服务器

ORACLE RMAN备份及还原   RMAN可以进行增量备份:数据库,表空间,数据文件 只有使用过的block可以被备份成backup set 表空间与数据文件对应关系:dba_data_files / v$datafile_header 在noarchivelog模式下,可以使用RMAN备份read-only和offline的表空间 ORACLE RMAN停机备份: 备份 RMAN连接上ORACLE,WINDOWS下在命令模式下 RMAN TARGET / 连接本地数据库用的是本地认证模式。RMAN连接数据库必须在dedicate模式下。因此在share模式下的数据库应配置一个dedicate的连接用于RMAN连接。 如果要把控制文件、参数文件也一起备份 configure controfile autobackup on;//打开autobackup  configure controfile autobackup off;//关闭autobackup 关闭数据库 RMAN>shutdown immediate mount 数据库RMAN的备份必须在MOUNT模式下,这也就是控制文件备份的重要。 RMAN>startup mount 最简单的备份 RMAN>backup database 就这一句就OK了 这样的备份,备份集在数据库默认位置。%oracle_home%/ora92/database 当然你也可以用run来灵活的定义你的备份。 RMAN>run{ >allocate chennel d1 type disk; //分配通道 >backup full database           //全备份数据库 >include current controlfile    //包括当前的controlfile >format 'e:\oracle\orders\db_%d_%s_%p_%t_%T'; //备份文件位置和文件名格式 >release channel d1;//释放通道 >} 恢复 1、数据文件损坏,而控制文件是好,或者已经恢复  RMAN连上数据库  startup mount  restore database  recover database noredo;  alter database open resetlogs;  recover database noredo该命令指示RMAN执行最后的恢复操作以准备打开这个数据库。因为是在NOARCHIVELOG模式下并且不应用任何归档的重做日志并且丢失了联机重做日志,所以要求在这条命令中使用noredo参数。 最后使用alter database open resetlogs打开数据库。由于已经还原了控制文件并且需要重新构建重做日志,所以必须用resetlogs。 2、还原控制文件 startup nomount; set dbid = restore controlfile from autobackup ; alter database mount; restore database; recover database noredo; alter database open resetlogs; alter database open; 在这个例子中有一个DBID这个可以 select * from v$database中查到。但是一个数据库在控制文件坏掉了不能OPEN如何能看的到呢这就在平时把这个DBID记下来。 这是最简单的用RMAN备份与恢复的例子,但从中可以看到RMAN备份与恢复的梗概。 ORACLE RMAN在线备份: 1. ORACLE RMAN在线备份之前需要切换日志方式为归档日志; a. 关闭数据库 SQL> shutdown immediate; b. 启动数据库到mount状态 SQL> startup mount; c. 启用归档模式 SQL> alter database archivelog; d. 查看修改后的数据库备份和恢复策略及归档文件的位置 SQL> archive log list; 注意:修改成archive模式之后,之前所有的数据库备份均无效。 e. 修改相应的初始化参数 Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。 可用SQL> show parameter log_archive_start;查看 NAME                                 TYPE        VALUE ------------------------------------ ----------- -------------- log_archive_start                    boolean     FALSE SQL> alter system set log_archive_start=true scope=spfile; 重启数据库此参数生效,此时数据库处于自动归档模式。 当然你也可以不做第5步,直接 SQL>archive log start 使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。 2. 运行:RMAN target / 3. RMAN信息保存:默认保存在control file中,保存周期7天 调整:alter system set control_file_record_keep_time=天数; 4. 搭建独立数据库保存RMAN备份信息 由于只有一个数据库,就建在本身数据库上 a. 创建表空间RC:create tablespace rc datafile size 10M autoextend on next 1M b. 创建用户RC: CREATE USER rc IDENTIFIED BY rc TEMPORARY TABLESPACE temp DEFAULT TABLESPACE  rc QUOTA UNLIMITED ON rc; c. 授权RC: GRANT RECOVERY_CATALOG_OWNER TO rc; d. 搭建: rman catalog rc/rc@orcl RMAN>create catalog; RMAN>exit rman target / catalog rc/rc@orcl RMAN>register database; e. 使用: rman target / catalog rc/rc@orcl 这种连接方式后,数据就会在控制文件和catalog各存一份 5. 全局参数配置: 查看:show all; 修改:configure 参数名称 具体设置 例如:修改是否自动保存control file:configure controlfile autobackup on; 恢复默认值:configure 参数名称 clear; 关键参数: a. 保存周期:retention policy 默认是redundancy 1:保留一个备份; 可用值:recovery window of 7 days:保留可以满足7天恢复周期的备份 根据条件检查:report obsolete:RMAN会根据保存周期参数来列出可以删除的备份 删除多于备份:delete obsolete b. 优化备份:backup optimization:RMAN会自动忽略已经备份过的内容(数据文件,归档日志,备份块) 前提:备份指定同一个channel c. 默认备份渠道:default device type to disk:默认备份到磁盘,路径为flash recovery area 渠道类型: disk:文件系统路径 flash recovery area:默认路径 sbt:磁带设备 修改到磁盘其他路径:configure channel device type disk format '路径/%U'; 例如:configure channel device type disk format '/tmp/movedata/%U'; 6. 备份结果 backupset:backup (as backupset) 备份内容,里面分割成一个或多个backup piece,只有该类型备份可以进行压缩。 copy:backup as copy 备份内容 按类型查看: backupset 查看:list backup summary(list backupset summary) 查看详情:list backupset BS copy查看:list copy 按内容查看: 整个数据库:list backup of database; tablespace:list backup of tablespace users; 数据文件:list backup of datafile n; 控制文件:list backup of controlfile; 归档日志:list archivelog all; 按规则查看: 查看根据保存规则可删除文件:report obsolete; 查看根据保存规则需要备份内容:report RMAN和OS结合检查:corsscheck 内容; 7. 备份方式 full:全备; Incremental:增量备份 可以增量备份的类型:数据库,数据文件,表空间 a. 首先需要做level 0备份作为基础。例如:backup incremental level 0 备份内容;(备份内容:所有使用过的data block,和image copy不同) b. 增量类型: 累计增量:backup cumulative level 1 备份内容; 差异增量:backup incremental level 1 备份内容; 区别:累计增量始终是基于level 0的备份; 第一次差异增量是基于level 0的备份;从第二开始就是基于前一次增量备份 c. Image备份增量方式: 第一次:以Image全备为基础; 第二次:基于全备,做增量备份;完成后合成成一个Image全备 第三次:基于第二次的Image全备,做增量备份;完成后合成成一个Image全备 实现: 例如:针对tablespace example RUN {    RECOVER COPY OF tablespace example WITH TAG 'incr_update';    BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'        tablespace example;    } d. 开启参数"block change tracking",可以提高速度 查看状态:SELECT status FROM v$block_change_tracking; 默认值:DISABLED 开启:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;(默认存放路径OMF中的DB_CREATE_FILE_DEST) 设置文件路径: ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/MYSID/rman_change_track.f' REUSE; 关闭:ALTER DATABASE DISABLE BLOCK CHANGE TRACKING; 备份并检查:bakcup check logical 备份内容; 不备份只是检查文件:backup validate 备份内容; 如果检查有报错,查看:v$backup_corruption;v$copy_corruption 8. 备份内容: 整个数据库:RMAN>backup database; 经典整库备份:backup as compressed backupset database include current controlfile plus archivelog delete input; tablespace:RMAN>backup tablespace 名字; 数据文件:RMAN>backup datafile n; (n:具体的数据文件编号select file_name,file_id,tablespace_name from dba_data_files;) 控制文件:RMAN>backup current controlfile; 或者RMAN>backup database include current controlfile; 日志文件:RMAN>backup archivelog all; 或者RMAN>backup database plus archivelog; 参数文件:RMAN>backup spfile; 9. 还原 a. 完全恢复 方法一:从最近的备份集恢复整个数据库,数据库会自动运行redo和archive日志(完全恢复): SQL>shutdown immediate SQL>startup mount RMAN>restore database; RMAN>recover database; RMAN>sql 'alter database open'; 方法二:从tag恢复整个数据库,数据库也会运行redo 和archive 日志(完全恢复),结果与上面的脚本一样: 1. 查看标签: RMAN> list backupset summary; Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag ------- -- -- - ----------- --------------- ------- ------- ---------- --- 25      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T104634 28      B  0  A DISK        25-JUL-11       1       1       NO         TAG20110725T104645 29      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T104711 30      B  F  A DISK        25-JUL-11       1       1       NO         TAG20110725T104713 31      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T105333 32      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T105350 33      B  1  A DISK        25-JUL-11       1       1       NO         TAG20110725T105353 34      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T105408 35      B  F  A DISK        25-JUL-11       1       1       NO         TAG20110725T105411 36      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T111403 37      B  1  A DISK        25-JUL-11       1       1       NO         TAG20110725T111405 38      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T111421 39      B  F  A DISK        25-JUL-11       1       1       NO         TAG20110725T111423 2. 还原数据库: SQL>shutdown immediate; SQL>startup mount; RMAN>restore database from tag TAG20110725T104645; RMAN> recover database from tag TAG20110725T104645; RMAN> alter database open; b. 不完全恢复: SQL>shutdown immediate; SQL>startup mount; RMAN>restore database from tag TAG20110725T104645; RMAN>recover database until time "to_date('2011-08-04 15:37:25','yyyy/mm/dd hh24:mi:ss')"; RMAN>alter database open resetlogs; 注意:使用后所有的备份集都无效了,确保安全需要重新对数据库进行全备(ORACLE10G之后,resetlog之前的备份还是可以用的) 关键表空间恢复(system / undotbs1 / sysaux): SQL>shutdown abort SQL>startup mount RMAN>restore tablespace 名字; RMAN>recover tablespace 名字; RMAN>sql 'alter database open'; 非关键表空间恢复(example / users ): select * from v$datafile_header; 表空间与数据文件对应关系 SQL>alter database datafile 数字 offline; RMAN>restore tablespace 名字; RMAN>recover tablespace 名字; SQL>alter database datafile 数字 online; 10. 删除备份 所有backup备份集:delete backup; 所有copy备份机:delete copy; 特定备份机:delete backupset 19; 删除根据保存规则可删除文件:delete obsolete; 删除过期的备份: delete expired backupset; delete expired copy; 11. RUN块 例如: RMAN> RUN {           ALLOCATE CHANNEL c1 DEVICE TYPE sbt;           ALLOCATE CHANNEL c2 DEVICE TYPE sbt;           ALLOCATE CHANNEL c3 DEVICE TYPE sbt;           BACKUP          INCREMENTAL LEVEL = 0          FORMAT '/disk1/backup/df_%d_%s_%p.bak'          (DATAFILE 1,4,5 CHANNEL c1)          (DATAFILE 2,3,9 CHANNEL c2)         (DATAFILE 6,7,8 CHANNEL c3);           ALTER SYSTEM ARCHIVE LOG CURRENT;        } 12. 外部变量: 语言:set nls_lang=american 日期:set nls_date_format=yyyy-mm-dd.... 13. RMAN sciprt 前提条件:有catalog 写法:(global表示可以由多个数据库调用) create global script 名 comment "备注说明" {脚本内容} 例如: create global script abc comment "test" {backup current controlfile;} 调用:run {execute script 名} 例如:run {execute script abc;} 查看:print script 名 改写: replace global script 名 comment "备注说明" {脚本内容} 删除:delete script 名; 14. 永久保留备份 条件是备份不能保留在flash recovery area中; a. 创建备份: RUN { ALLOCATE CHANNEL c1 DEVICE TYPE disk format '/tmp/autobackup/%U'; BACKUP tablespace example; } b. 查找该备份: list backupset of tablespace example; c. 修改属性为永久 change backupset 编号 keep forever nologs; 15. 建立多个固定大小的备份 例如:example 测试备份大小是大于50M run { allocate channel c1 device type disk maxpiecesize 10M format '/tmp/autobackup/%U'; backup tablespace example; } /tmp/autobackup目录下有六个文件 16.运行脚本:backup recovery area 备份内容: a. control file autobackup; b. incremental backup sets 17.block change tracking a. 针对整个数据库; b. 默认存放路径:background_dump_dest

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档