-
UID:862213
-
- 注册时间2016-04-26
- 最后登录2016-07-12
- 在线时间11小时
-
- 发帖34
- 搜Ta的帖子
- 精华0
- 黑豆6
- 威望138
- 贡献值0
- 交易币0
- 红豆0
-
访问TA的空间加好友用道具
|
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 = <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 1Mb. 创建用户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 [email=rc/rc@orcl] rc/rc@orcl[/email] RMAN>create catalog;RMAN>exitrman target / catalog [email=rc/rc@orcl] rc/rc@orcl[/email] RMAN>register database;e. 使用:rman target / catalog [email=rc/rc@orcl] rc/rc@orcl[/email] 这种连接方式后,数据就会在控制文件和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 obsoleteb. 优化备份:backup optimization:RMAN会自动忽略已经备份过的内容(数据文件,归档日志,备份块)前提:备份指定同一个channelc. 默认备份渠道: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 BScopy查看: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;查看根据保存规则需要备份内容:reportRMAN和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 exampleRUN { 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_corruption8. 备份内容:整个数据库: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 immediateSQL>startup mountRMAN>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 TAG20110725T1114232. 还原数据库: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 abortSQL>startup mountRMAN>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 abccomment "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 测试备份大小是大于50Mrun{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 sets17.block change trackinga. 针对整个数据库;b. 默认存放路径:background_dump_dest 更多精彩Oracle 内容请关注我:
|