设为首页 收藏本站
查看: 418|回复: 0

[经验分享] ORACLE RMAN备份及还原

[复制链接]

尚未签到

发表于 2018-9-8 06:36:23 | 显示全部楼层 |阅读模式
  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>>  d. 查看修改后的数据库备份和恢复策略及归档文件的位置
  SQL> archive log list;
  注意:修改成archive模式之后,之前所有的数据库备份均无效。
  e. 修改相应的初始化参数
  Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。
  可用SQL> show parameter log_archive_start;查看
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- --------------
  log_archive_start                    boolean     FALSE

  SQL>>  重启数据库此参数生效,此时数据库处于自动归档模式。
  当然你也可以不做第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>  b. 创建用户RC:

  CREATE USER 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>>  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);

  >  }
  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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-567265-1-1.html 上篇帖子: 【读书笔记】ORACLE 内存管理 下篇帖子: Oracle数据库常用操作sql语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表