博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rman命令学习-tina(下)
阅读量:6404 次
发布时间:2019-06-23

本文共 9219 字,大约阅读时间需要 30 分钟。

五、rman删除 

    delete命令 

    删除相关的备份集或镜像副本的物理文件,同时将删除标记DELETE更新到控制文件,如果使用恢复目录,则是清除恢复目录内的备份集。 

    delete (archivelog, backuppiece, backupset, backup, controlfilecopy, copy, datafilecopy, expired, force, 

    foreign, global, noprompt, obsolete, proxy, script) 

    RMAN> delete backupset; 

    RMAN> delete backupset n; 

    RMAN> delete obsolete ; 

    RMAN> delete obsolete redundancy 2; 

    RMAN> delete noprompt copy; 

    RMAN> delete noprompt backupset tag TAG20101016T143521;  --prompt 提示 ->noprompt 不提示 

    RMAN> delete obsolete recovery window of 7 days; 

    RMAN> delete expired backupset; 

    RMAN> delete expired copy; 

    RMAN> delete expired archivelog all; 

    RMAN> delete archivelog until time 'sysdate-5'; 


举例: 

RMAN> delete backupset 17; 

RMAN> delete backupset tag TINADB1218_0; 

using channel ORA_DISK_1 

List of Backup Pieces 

BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name 

------- ------- --- --- ----------- ----------- ---------- 

20      20      1   1   AVAILABLE   DISK        /orabak/db_0_tinadb_0mqp4b88_1_1 

23      23      1   1   AVAILABLE   DISK        /orabak/db_0_tinadb_0pqp4bou_1_1 

Do you really want to delete the above objects (enter YES or NO)? ---需要输入yes确认 

RMAN> delete noprompt backupset tag TINADB1218_0;    ---不确认直接删除 



六、rman恢复 

1)恢复spfile 

RMAN>restore spfile to '/u01/oracle/testspfile.ora' from autobackup; 

RMAN>restore spfile from '/u01/oracle/TINADB/autobackup/2015_12_17/o1_mf_s_898707140_c74xy47h_.bkp' 


2)恢复control file 

RMAN> set dbid=1669126943 

RMAN> restore controlfile to '/u01/oradata/tinadb/control01.ctl' from autobackup; 

RMAN> restore controlfile from autobackup until time "to_date('2015-12-18 15:00:00','yyyy/mm/dd hh24:mi:ss')"; 

---这不是备份时的精确时间,是指这时间点之前最近一次的控制文件的备份。 


3)恢复archive log 

   restore archivelog 的各种选项 

   1.恢复全部归档日志文件 

     RMAN> restore archivelog all; 

   2.只恢复5到8这四个归档日志文件 

     RMAN> restore archivelog from logseq 5 until logseq 8; 

   3.恢复从第5个归档日志起 

     RMAN> restore archivelog from logseq 5; 

   4.恢复7天内的归档日志 

     RMAN> restore archivelog from time 'sysdate-7'; 

   5.sequence between 写法 

     RMAN> restore archivelog sequence between 1 and 3; 

   6.恢复到哪个日志文件为止 

     RMAN> restore archivelog until logseq 3; 

   7.从第五个日志开始恢复 

     RMAN> restore archivelog low logseq 5; 

   8.到第5个日志为止 

     RMAN> restore archivelog high logseq 5; 


4)恢复数据库 

RMAN> restore database; 

RMAN> recover database until time "TO_DATE('2015-12-18 15:00:00','YYYY-MM-DD HH24:MI:SS')"; 


七、rman report 

report用于判断数据库当前可恢复状态、以及数据库已有备份的信息。 

最常使用的是report obsolete; report schema; 

report {device, need, obsolete, schema, unrecoverable} 


report schema;---报告数据库模式 

report obsolete;---报告已丢弃的备份集(配置了保留策略)。 

report unrecoverable;---报告当前数据库中不可恢复的数据文件(即没有这个数据文件的备份、或者该数据文件的备份已经过期) 

report need backup;---报告需要备份的数据文件(根据条件不同) 

report need backup days=3; 

        --最近三天没有备份的数据文件(如果出问题的话,这些数据文件将需要最近3天的归档日志才能恢复) 

report need backup incremental=3; 

        --需要多少个增量备份文件才能恢复的数据文件。(如果出问题,这些数据文件将需要3个增量备份才能恢复) 

report need backup redundancy=3; 

        --报告出冗余次数小于3的数据文件 

        --例如数据文件中包含2个数据文件system01.dbf和users01.dbf. 

        --在3次或都3次以上备份中都包含system01.dbf这个数据文件,而users01.dbf则小于3次 

        --那么,报告出来的数据文件就是users01.dbf 

        --即,报告出数据库中冗余次数小于 n 的数据文件 

report need backup recovery window of 2 days; 

        --报告出恢复需要2天归档日志的数据文件 


八、crosscheck命令 

用于检验存储仓库中的备份集或镜像副本,执行改命令后,将更新存储仓库中的刚刚校验的对象状态,便于后续操作处理。 


RMAN备份校验是的几种状态: 

Expired:对象不存在于磁盘或磁带。当一个备份集处于expired状态,则该备份集中所有的备份片同样处于expired状态。 

Available:对象处于可用状态。当一个备份集可用,则改备份集内的所有备份片同样可用。 

Unavailable:对象处于不可用状态。当一个备份可不用,则改备份集内的所有备份片同样不可用 

    RMAN> crosscheck backupset;   

    RMAN> crosscheck copy;                  

    RMAN> crosscheck backup of controlfile;    

    RMAN> crosscheck backup of archivelog all; 

    RMAN> crosscheck backup of datafile 1,2;  

    RMAN> crosscheck backup of tablespace sysaux,system;                     

    RMAN> crosscheck backup completed between '13-OCT-10' and '23-OCT-10'; 

    RMAN> crosscheck backupset 1067,1068; 


九、validate命令 

    验证一个备份集内的数据的完整性。RMAN扫描备份集得所有备份片,并检查校验和,验证其内容是否可以成功还原, 

    validate是较crosscheck更高一级的验证操作,crosscheck仅仅是检查备份集的头部信息,检验文件的存在性,validate验证数据的有效性。 

RMAN> validate backupset <primary key> [check logical] 



十、change 

1、改变备份集状态 

      可用CHANGE BACKUPSET .. UNAVAILABLE/AVAILABLE 来改变一个备份集的状态。 

      RMAN>CHANGE BACKUPSET 22 UNAVAILABLE 


2、改变映像副本状态 

      数据文件:CHANGE DATAFILECOPY .. AVAILABLE/UNAVAILABLE 

      控制文件:CHANGE CONTROLFILECOPY .. AVAILABLE/UNAVAILABLE 

      归档日志:CHANGE ARCHIVELOG .. AVAILABLE/UNAVAILABLE 

      例如: 

      RMAN>CHANGE DATAFILECOPY 'D:\BACKUP\DEMO_37.BAK' UNAVAILABLE; 


3、建立长期备份 

      长期备份是指被长期保留的备份文件,使用长期备份的目的是为了可以将数据库恢复到过去的特定时间点。当社顶了长期备份之后,RMAN会从设备冗余策略中 

      免除该备份文件,也就是说,长期备份文件不会被标记为陈旧备份。 

      命令:CHANGE .. KEEP/NOKEEP 

      (1)使备份集156永久保留 

         RMAN>CHANGE BACKUPSET 156 KEEP FOREVER LOGS; 

      (2)使备份集198保留60天 

         RMAN>CHANGE BACKUPSET 198 KEEP UNTIL TIME 'SYSDATE+60' LOGS; 

      (3)免除备份集156的保留期限 

         RMAN>CHANGE BACKUPSET 156 NOKEEP 



十一、常在run块中运行的命令 

1)给数据文件指定新的路径和名称,例如: 

rman>run { 

    allocate channel c1 device type disk; 

    set newname for datafile 4 to 'D:\oracle\bobnew\users01.dbf'; 

                } 


2)设置恢复到的时间点或SCN,例如: 

rman>run { 

    allocate channel c1 device type disk; 

    set until time "to_date('2013-12-27 10:33:05','yyyy-mm-dd hh24:mi:ss') "; 

    ...  

                } 

                

3)定义备份片段的冗余数: 

rman>run { 

    allocate channel c1 device type disk; 

    set backup copies 3; 

    ... 

                } 

                

4)指定resetore/recover命令产生的归档文件的存储路径,默认情况下归档文件会在log_archive_dest_1指定路径下,如果通过 

set archivelog destination to指定后,则归档文件产生与set指定的路径下 

rman>run { 

    allocate channel c1 device type disk; 

    set archivelog destination to '新路径'; 

    ... 

                } 


十二、如何正确地删除Archivelog: 

   Archivelog并不能直接得从OS层直接物理删除,因为archivelog的相关信息是记录在controlfile中的, 

   当物理删除后不会改变controlfile的设置。并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标注为存在。 

   也就是说Oracle并不认为这些日志被删除了,所以在删除archivelog的时候,需要我们在其他地方做一些设置。 


1)使用RMAN清楚物理删除后的记录 

可以使用RMAN来删除archivelog,具体可以按以下步骤操作: 

1、物理删除archivelog 

2、进入RMAN 

3、crosscheck archivelog all; 

4、delete expried archivelog all; 

这样就在一些Oracle的记录中查不到相应的archivelog记录了。 


2)直接使用RMAN删除archivelog 

其实在RMAN中是可以使用命令直接将ARCHIVELOG删除的,命令如下: 

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 

表示删除7天以前的所有archivelog,但是这个命令的缺点是无法对archivelog进行细致的划分。 


3)删除N天以前的归档日志,有两个命令: 

delete archivelog until time 'sysdate-N' 

delete archivelog all completed before 'sysdate-N' 


区别已经很明显: 

list archivelog until time 'sysdate-1'; 此时是按照归档日志开始时间即fisrt_time作为截止时间 

list archivelog all completed before 'sysdate-1' 是按照归档日志完成时间即completion_time作为截止时间 

试想如果删除归档日志,还是采用delete archivelog all completed before 'sysdate-N' 


十三、备份相关的动态性能视图及监控 

    1.相关视图 

        v$backup_files 

        v$backup_set 

        v$backup_piece 

        v$backup_redolog 

        v$backup_spfile 

        v$backup_device 

        v$rman_configuration 

        v$archived_log 

        v$backup_corruption 

        v$copy_corruption 

        v$database_block_corruption 

        v$backup_datafile 


   2.查看rman完整的进度      

        SQL> select sid,serial#,context,sofar,totalwork, 

          2  round(sofar/totalwork*100,2) "% Complete" 

          3  from v$session_longops 

          4   where opname like 'RMAN:%' 

          5  and opname not like 'RMAN:aggregate%' 

          6  and totalwork!=0;    


   3.通过如下SQL获得rman用来完成备份操作的服务进程的SID与SPID信息: 

        select sid, spid, client_info 

          from v$process p, v$session s 

         where p.addr = s.paddr 

           and client_info like '%id=rman%' 


十四、oracle10g 中rman的增强功能catalog  start with---将备份集注册到控制文件 

RMAN> catalog start with '/orabak/tinadb'; 


通过注册的形式,可以让db读取到我们的备份集,也可通过此方式异地进行备份集恢复。 



常见报错:RMAN-08137: WARNING: archive log not deleted as it is still need 


archived log file name=+FRA_DG/omsdb/archivelog/2013_12_31/thread_1_seq_78149.4167.835588207 thread=1 sequence=78149 

RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process 

archived log file name=+FRA_DG/omsdb/archivelog/2013_12_31/thread_1_seq_78150.15705.835589103 thread=1 sequence=78150 

RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process 

archived log file name=+FRA_DG/omsdb/archivelog/2013_12_31/thread_1_seq_78151.8949.835590003 thread=1 sequence=78151 


发现有个告警信息,通过查看备份日志,发现: 

released channel: ORA_DISK_1 

released channel: ORA_DISK_2 

piece handle=/ora01/db_bak/9rmqc9u3_1_1 tag=TAG20111030T035751 comment=NONE 

channel ORA_DISK_1: backup set complete, elapsed time: 00:04:57 

RMAN-08137: WARNING: archive log not deleted as it is still needed 


经过研究后确认是由于这个数据库上配置了oracle stream replication,因为在备份完后进行删除时, 

这个归档日志还没有被capture process解析完,因此就不能删除,出这样的告警。 


尝试删除归档日志,oracle提示这些归档日志还要用到standby数据库上面,不让删除, 

这个特点不错,可以避免由于没有同步standby而误删除archivelog的情况。 

要删除,需要加上FORCE删除就可以了。 

RMAN> delete noprompt  force archivelog all; 

这种方法不可取 


RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO STANDBY; 

old RMAN configuration parameters: 

CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY; 

new RMAN configuration parameters: 

CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO STANDBY; 

new RMAN configuration parameters are successfully stored 

RMAN-08591: WARNING: invalid archived log deletion policy 


然后又改回去: 

RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO all standby; 

SQL> show parameter log_archive 

NAME                                 TYPE        VALUE 

------------------------------------ ----------- ------------------------------ 

log_archive_config                   string      DG_CONFIG=(omsdb,omsstd) 

log_archive_dest                     string 

log_archive_dest_1                   string      location=USE_DB_RECOVERY_FILE_ 

                                                 DEST 

log_archive_dest_10                  string 

log_archive_dest_11                  string 

log_archive_dest_12                  string 

log_archive_dest_13                  string 

log_archive_dest_14                  string 

log_archive_dest_15                  string 

log_archive_dest_16                  string 


NAME                                 TYPE        VALUE 

------------------------------------ ----------- ------------------------------ 

log_archive_dest_17                  string 

log_archive_dest_18                  string 

log_archive_dest_19                  string 

log_archive_dest_2                   string      service=cnsz02_omsdb_01 lgwr a 

                                                 sync noaffirm reopen=60 DB_UNI 

                                                 QUE_NAME=omsdb 

这是因为有一个dg名为omsstd的没有了,不存在了,all stantdby就会报错,说还在用,日志不能删 

这个log_archive_config 参数一旦设置了,就一定要所有的dg都同样设置。 


应该是可以在线修改的,alter system set log_archive_config='',scope=both; 

主备库都需要修改。 

转载地址:http://kxiea.baihongyu.com/

你可能感兴趣的文章
一起来将vscode变成私人定制笔记本
查看>>
Flutter 云音乐
查看>>
RecyclerView实现多type页面
查看>>
个人的web商城网站
查看>>
debian fcitx
查看>>
排中律与实无穷问题的性质分析
查看>>
08/23 学习总结
查看>>
关于Ubuntu下安装phpmyadmin后mysqli丢失的解决
查看>>
物理层
查看>>
linux多网卡路由设置
查看>>
win7环境下的栈溢出与实战
查看>>
查看ios字体库方法
查看>>
八大监听器
查看>>
self.navigationController退出到指定页面,或者一次性pop出n个页面
查看>>
Quartz实现数据库动态配置定时任务
查看>>
iptables 端口转发以及双向通信
查看>>
备战一线互联网公司Java工程师面试题 (1)
查看>>
ThinkPHP中自动验证失败
查看>>
jquery图片切换插件jquery.cycle.js参数详解
查看>>
JavaScript push() 方法
查看>>