天天看点

RMAN实战14:用RMAN恢复ORACLE归档日志、控制文件、spfile及logminer的使用

    • 归档日志
      • 恢复所有备份的归档到默认位置
      • 恢复指定范围内的归档日志
      • 用命令块将归档日志恢复到非默认位置
    • 控制文件的恢复
    • spfile 文件的恢复
    • logminer工具的使用
主要介绍了用RMAN将归档日志、控制文件、spfile恢复到默认位置或其他位置

归档日志

RMAN在恢复的过程中如果需要归档文件进行redo一般会在原归档日志找归档,本地找不需要归档的情况下再去备份集、备份片中找一家备份的归档日志,所以在一般情况下不需要恢复归档,单在如下情况下可能要需要恢复归档日志:

  1. 恢复是可能需要归档重做日志,提交把归档恢复,提高恢复速度
  2. 将归档重做日志恢复到非默认位置
  3. 需要用logminer分析日志中的内容,关于LogMiner的简单实用,文中最后会有介绍

恢复所有备份的归档到默认位置

下面的这sql来查询曾经产生过的归档日志:

用下面这个命令来将所有已经备份的归档(从上面sql查出来的归档)还原到原位置,如果这些归档都存在的话:

RMAN> restore archivelog all;
           

执行前进行交叉验证一次,作用是验证控制文件中备份信息是否磁盘上备份对的上号:

crosscheck archivelog all;
           

恢复指定范围内的归档日志

RMAN> restore archivelog from sequence  until sequence  thread ;
RMAN> restore archivelog sequence between  and  thread ;
# 在磁盘上的归档不会被恢复,如果强制进行覆盖可硬用force 参数:
RMAN> restore archivelog from sequence  force;
           

用命令块将归档日志恢复到非默认位置

run{
set archivelog destination to '/u01/archtemp';
restore archivelog from sequence  force;
}
           

控制文件的恢复

# 从恢复目录中恢复
$ rman target / catalog rcat/[email protected]
RMAN> startup nomount;
RMAN> list backup of controlfile;
RMAN> startup nomount;
RMAN> restore controlfile;

# 从autobackup中恢复
$ rman target /
RMAN> startup nomount;
RMAN> restore controlfile from autobackup;
# 如果知道备份的控制文件名可以指定恢复
RMAN> startup nomount;
RMAN> restore controlfile from
'/u01/O12C/rman/rman_ctl_c-3423216220-20130113-01.bk';
           

spfile 文件的恢复

# 从恢复目录恢复
$ rman target / catalog rcat/[email protected]
RMAN> startup nomount;
RMAN> restore spfile;
# 用自动恢复
RMAN> startup nomount force;
RMAN> restore spfile to '/tmp/spfile.ora'
from '/u01/O12C/rman/rman_ctl_c-3423216220-20130113-00.bk';
# 然后vi修改下,在改名字求OK了
$ cp /tmp/spfile.ora $ORACLE_HOME/dbs/spfileo12c.ora
           

logminer工具的使用

这个是oracle数据库的一个工具,用于发掘归档日志中的数据:

--初始化
SQL> @?\rdbms\admin\dbmslm.sql;

程序包已创建。


授权成功。


同义词已创建。

SQL>  @?\rdbms\admin\dbmslmd.sql;

程序包已创建。


同义词已创建。

SQL>

--修改时间格式
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
--验证时间格式
select sysdate from dual
--用一个业务用户连接,做一些更改的操作,并提交
select * from test1
delete from test1 where job_id='AD_VP'
update test1 set max_salary=max_salary+
--用sysdba连接将在线日志归档
conn /as sysdba
alter system switch logfile;
--查看日志
select t.first_time,
  t.name
from v$archived_log t
order by t.first_time
--选择要分析的日志,用sys用户
desc execute dbms_logmnr.add_logfile(logfilename=>'C:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\_06_22\O1_MF_1_1_BRHVGN9R_.ARC',options=>dbms_logmnr.new);
--开始分析
execute dbms_logmnr.start_logmnr(options=> dbms_logmnr.dict_from_online_catalog);
--查看分析内容
select *
from v$logmnr_contents lc
where lc.seg_owner='USER1' execute dbms_logmnr.end_logmnr;
--结束分析
execute dbms_logmnr.end_logmn