Benjamin Zhang

目前就职于中科院计算机网络信息中心,主要兴趣集中在数据库,操作系统,中间件。

【RMAN】RMAN命令汇总

01 Feb 2019 » RMAN

RMAN命令汇总

2013年写了关于RMAN命令的汇总,先转换为MD文档,温故而知新。

1.进入RMAN

  • 进入本地数据库

    [oracle@oracle-n1 ~]$ rman target / 
    
  • 进入远程数据库

     [oracle@oracle-n1 ~]$ rman target zsd/zsd@zsddb_1.9
    
  • 使用日志功能

    [oracle@oracle-n1 logs]$ rman target / msglog /data/backup/logs/full_dbbackup_`date +%y%m%d`.log 
    

2.RMAN基础命令

  • 启动关闭数据库

    RMAN> shutdown immediate
    RMAN> startup 
    
  • 执行操作系统命令

    RMAN> host 
    
  • 执行SQL语句

    RMAN> SQL 'ALTER SYSTEM SWITCH LOGFILE';
    需要注意的一点是,rman中的sql环境不能执行SELECT语句,就算执行不报错,也不出结果。
           
    RMAN> SQL 'select  * from member.test';
    sql statement: select  * from member.test (可以看出没有任何数据显示) 
    
  • 查看默认RMAN配置

    RMAN>show all;
           
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default  设置的保留策略冗余度为1
    CONFIGURE BACKUP OPTIMIZATION OFF; # default      备份优化为off
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default  默认的配置通道为磁盘,如果是sbt就为磁带设备
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default   默认配置controlfile不自动备份
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default  controlfile自动备份的位置
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default     备份类型为backupset,备份类型的并行度为1
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default  数据文件备份的拷贝为1
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default 归档日志文件备份的拷贝为1
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default   备份集大小不设上限
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default   数据库加密技术为off
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default 数据库加密算法'AES128'
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default   归档日志的删除策略为NONE
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/data/ora11g/product/11.2.0/db_1/dbs/snapcf_zsddb.f'; # default  controlfile的快照命名为'/data/ora11g/product/11.2.0/db_1/dbs/snapcf_zsddb.f' 
    
  • 修改默认RMAN参数设置

    configure retention policy to recovery window of 7 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '/data/backup/rman/con_%F'; 
    

3.RMAN基本备份命令

  • 数据库进行备份

    1. 备份数据库

      RMAN>BACKUP DATABASE; 
      

      注意:也可以指定备份的位置:RMAN> BACKUP DATABASE FORMAT ‘/data/backup/rman/bak_%U’;

    2. list命令查看刚刚创建的备份信息:

      RMAN>list backup of database;
      
  • 表空间进行备份

    1. 备份表空间

      RMAN>backup tablespace HDMEMBER; 
      
    2. 通过LIST BACKUP 查看一下备份

      RMAN>list backup of TABLESPACE HDMEMBER; 
      
  • 备份指定数据文件

    1. 查看对应的数据文件及其序号

      select file_name,file_id,tablespace_name from dba_data_files 
      
    2. 再通过BACKUP DATAFILE备份指定序号的数据文件

      RMAN> BACKUP DATAFILE n;
      
    3. 通过list backup查看备份

      RMAN> LIST BACKUP OF DATAFILE n; 
      
  • 备份控制文件

    1. 第一种,做任何备份的时候,自动备份控制文件

      RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; 
      
    2. 第二种,手动执行控制文件备份

      RMAN> BACKUP CURRENT CONTROLFILE; 
      
    3. 第三种,执行BACKUP时指定INCLUDE CURRENT CONTROLFILE参数

      RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE; 
      
    4. 查看备份的控制文件

      RMAN> LIST BACKUP OF CONTROLFILE; 
      
    5. 使用alter database backup controlfile备份控制文件

      SQL> alter database backup controlfile to trace;
      或者
      SQL> alter database backup controlfile to trace as '/data/controlfile1.cof';   (这样你可以查看controlfile的构成)
      
  • 备份归档日志文件

    1. 利用BACKUP ARCHIVELOG命令备份

      RMAN> BACKUP ARCHIVELOG ALL; 
      
    2. BACKUP过程中利用PLUS ARCHIVELOG参数备份

      RMAN> BACKUP DATABASE PLUS ARCHIVELOG; 
      

      其中PLUS ARCHIVELOG的命令解释: 1>.运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档。 2>.执行BACKUP ARCHIVELOG ALL命令备份所有已归档日志。 3>.执行BACKUP命令对指定项进行备份。 4>.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档。 5>.对新生成的尚未备份的归档文件进行备份。

    3. 查看已备份的归档日志片段:

      MAN> LIST BACKUP OF ARCHIVELOG ALL; 
      

4.rman其他命令

RMAN的删除命令

  • 删除过期备份(RMAN会根据冗余策略确定备份是否过期)

    RMAN> delete obsolete; 
    
  • 删除无效备份(通过CROSSCHECK命令核对备份集,如果发现备份无效,rman会将该备份集标记为EXPIRED状态。)

    RMAN> delete expired backup; 
    
  • 删除特定备份集(通过list backup选择你所要删除的备份集)

    RMAN> delete backupset 12; 
    
  • 删除特定备份片

    RMAN> delete backuppiece '/data/backup/zsd_bk.bak'; 
    
  • 删除所有备份集

    RMAN> delete backup; 
    
  • 删除归档目录中已备份的归档日志

    RMAN> backup archivelog all delete input; 
    

RMAN report命令

​ 主要是用于当前备份信息的分析,如哪些备份已经过期,哪些文件该备份,哪些备份不可用,哪些备份可以删除。

  • 查看过期备份

    RMAN>report obsolete; 
    

RMAN crosscheck命令

​ 用来检查备份或归档物理文件的状态,如果物理文件存在,并且控制文件(或恢复目录)中有匹配记录,则标记该对象的状态为available(有效), 如果文件已经不存在,则标记该对象为expired(无效)

  • 检查所有归档文件:

    RMAN>crosscheck archivelog all;  
    
  • 检查所有备份集:

    RMAN>crosscheck backup; 
    

rman validate命令

​ RMAN能够检测物理和逻辑讹误。validate命令帮助保证备份文件存在于合适的位置,可读取,并且没有逻辑及物理讹误。

  • 测试任一特定备份集

    RMAN>validate backupset 9; 
    
  • 测试整个数据库和归档日志备份集

    RMAN>backup validate database archivelog all; 
    

RMAN的一些视图

  • 监控和验证RMAN作业

    V$RMAN_STATUS视图显示所有完成作业的状态以及命令

    SQL>select operation,status,start_time,end_time from v$rman_status; 
    

    V$SESSION_LOGGOPS视图上查询估计备份的进度

    SQL>select opname,to_char(start_time,'DD-MON-YY HH24:MI') "Start of backup",Sofar,totalwork,elapsed_seconds/60 "ELAPSED TIME IN MINUTES",ROUND(sofar/totalwork*100,2) "Percentage Completed so far" from v$session_longops
    

5.rman实战

以下是一个实战的rman备份脚本

BACKUP AS COMPRESSED BACKUPSET SKIP INACCESSIBLE FILESPERSET 10 DATABASE PLUS ARCHIVELOG FILESPERSET 20 DELETE ALL INPUT; 

其中:

COMPRESSED:表示压缩的备份

SKIP INACCESSIBLE:表示跳过不可读的文件。我们知道一些offline的数据文件只要存在于磁盘上就仍然可被读取,但是 可能有些文件已经被删除或移到它处造成不可读,加上这个参数就会跳过这些文件.

FILESPERSET 10:表示一个备份集中有多少个文件,这个就是一个备份集有10个文件。

以下是用来检验filesperset 2这个参数的意义

BACKUP AS COMPRESSED BACKUPSET SKIP INACCESSIBLE FILESPERSET 2 DATABASE 

6.RMAN 恢复

明确两个概念:数据库修复(Restore)和数据库恢复(Recover)

restore:是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。

recover:是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分redo,将数据库恢复到指定的时间点.(前提是:所有重做日志文件都在, 包括在线和归档的) 。

  • 对数据库进行完全介质恢复

    1. 启动数据库到加载状态:

      RMAN> SHUTDOWN IMMEDIATE;
      RMAN> STARTUP MOUNT; 
      
    2. 执行恢复操作

      RMAN> RESTORE DATABASE;
      RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP; 
      

      注意:DELETE ARCHIVELOGS和SKIP TABLESPACE两个参数是可选择的,作用如下:

      DELETE ARCHIVELOGS:表示RMAN将在完成恢复过程后自动删除那些在恢复过程中修复的归档日志文件。

      SKIP TABLESPACE:跳过指定表空间,比如临时表,当然临时表空间即使你不跳过它也不会恢复的。

    3. 打开数据库

      RMAN> ALTER DATABASE OPEN; 
      
  • 恢复表空间

    1. 启动数据库到加载状态

      RMAN> SHUTDOWN IMMEDIATE;
      RMAN> STARTUP MOUNT; 
      
    2. 进行恢复操作

      RMAN> SQL 'ALTER TABLESPACE HDMEMBER OFFLINE IMMEDIATE';
      RMAN> RESTORE TABLESPACE HDMEMBER;
      RMAN> RECOVER TABLESPACE HDMEMBER;
      RMAN> SQL 'ALTER TABLESPACE HDMEMBER ONLINE'; 
      
    3. 打开数据库

      RMAN> ALTER DATABASE OPEN; 
      
  • 恢复数据文件

    1. 启动数据库到加载状态

      RMAN> SHUTDOWN IMMEDIATE;
      RMAN> STARTUP MOUNT; 
      
    2. 进行恢复操作

      RMAN>SQL 'ALTER DATABASE DATAFILE 5 OFFLINE';
      RMAN> RESTORE DATAFILE 5;
      RMAN> RECOVER DATAFILE 5;
      RMAN>SQL 'ALTER DATABASE DATAFILE 5 ONLINE'; 
      
    3. 打开数据库

      RMAN> ALTER DATABASE OPEN; 
      

      提示:查询对应的数据文件,表空间和数据文件序号:

      附个SQL:用来查询数据文件,临时文件与表空间对应及数据文件序号:

      set linesize 999;

      select ts.tablespace_name, df.file_name, df.file_id, tf.file_name

      from dba_tablespaces ts, dba_data_files df, dba_temp_files tf

      where ts.tablespace_name = df.tablespace_name(+)

      and ts.tablespace_name = tf.tablespace_name(+);

  • 示例:归档模式下,假设某数据文件丢失,恢复该数据文件

    1. 制造案例数据

      sqlplus /nolog
      conn member/member
      create table zsd(name varchar2(50));
      insert into zsd values ('test1');
      insert into zsd values ('test2');
      insert into zsd values ('test3'); 
      
    2. 关闭,删除文件,启动数据库

      SQL> conn / as sysdba    
      SQL> shutdown immediate;
      SQL> host 
      [oracle@oracle-n1 ~]$ rm -rf /data/ora11g/oradata/zsddb/hdmember01.dbf
      SQL> startup
      SQL> archive log list(查看一下是否归档) 
      
    3. 查看一下示例,并恢复数据库

      select instance_name,status from v$instance
      set oracle_sid=zsddb
      rman target /
      RMAN> restore datafile '/data/ora11g/oradata/zsddb/hdmember01.dbf';
      RMAN> recover datafile '/data/ora11g/oradata/zsddb/hdmember01.dbf';
      RMAN> alter database open;  
      
  • 示例:丢失控制文件的恢复

    SQL> shutdown immediate;
    [oracle@oracle-n1 ~]$ rm -rf /data/ora11g/oradata/zsddb/control*
    进入rman
    rman target /
    随意指定一个DBID
    RMAN> set dbid 3391142503
    RMAN> restore controlfile from '/data/ora11g/product/11.2.0/db_1/dbs/con_c-1552557445-20130520-06';
    RMAN> sql 'alter database mount';
    RMAN> restore database;
    RMAN> recover database;
    RMAN> sql 'alter database open resetlogs';
    (还必须重建临时表空间)