我是靠谱客的博主 玩命大门,最近开发中收集的这篇文章主要介绍RMAN一次RMAN将数据库不完全恢复,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于oracle11数据库部分数据误删除,需要将数据库不完全恢复至2011年7月4日。
硬件要求:
1、 与oracle11同平台的主机环境,即AIX 6L。
2、 大于30G的存储空间。
考虑到oracle11占用的存储空间不大,为方便起见,将数据库恢复至同主机的不同目录下,即文件系统/bak/zhoul/oradata中。
一、 恢复前检查
检查数据库备份是否完成,可以看到在2011年7月2日数据库进行了0级的增量备份,7月3日至7月4日数据库进行了1级的增量备份,备份集统一存放在/bak/rman/oracle11中。
简要说明增量备份,oracle的增量备份分为差异增量备份differential和累积增量备份cumulative,默认情况下我们都采用前者,而对于增量备份的各个等级的区别,生产环境中,我们视情况一般就定义0级和1级增量备份。所谓0级增量备份,也就是对数据库进行完整备份,是一个数据库的完整备份。0级又是所有增量备份的开始。也是各级增量备份的基础。1级备份则是从上一次0级或者1级备份之后的所有变化的数据进行备份
 
以下为备份集结果输出,为方便阅读,以下输出结果有所省略,根据输出结果,我们可以清楚的知道,数据库在2011年7月2日进行了一次0级备份,7月3日至7月7日每天进行一次1级备份。
 
oracle@/tmp$ rman target /
RMAN> list backup of database;
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
830     Incr 0  11.11G     DISK        00:05:02     02-7鏈?-11     
        BP Key: 830   Status: AVAILABLE  Compressed: NO  Tag: TAG20110702T000021
        Piece Name: /bak/rman/oracle11/bkup_rgmgcqkm_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
833     Incr 1  175.70M    DISK        00:03:28     03-7鏈?-11     
        BP Key: 833   Status: AVAILABLE  Compressed: NO  Tag: TAG20110703T003018
        Piece Name: /bak/rman/oracle11/bkup_rkmgfgot_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
836     Incr 1  170.66M    DISK        00:03:26     04-7鏈?-11     
        BP Key: 836   Status: AVAILABLE  Compressed: NO  Tag: TAG20110704T003013
        Piece Name: /bak/rman/oracle11/bkup_romgi54n_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
839     Incr 1  168.15M    DISK        00:03:18     05-7鏈?-11     
        BP Key: 839   Status: AVAILABLE  Compressed: NO  Tag: TAG20110705T003013
        Piece Name: /bak/rman/oracle11/bkup_rsmgkpgn_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
842     Incr 1  190.43M    DISK        00:03:22     06-7鏈?-11     
        BP Key: 842   Status: AVAILABLE  Compressed: NO  Tag: TAG20110706T003012
        Piece Name: /bak/rman/oracle11/bkup_s0mgndsm_1_1
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
845     Incr 1  168.15M    DISK        00:03:26     07-7鏈?-11     
        BP Key: 845   Status: AVAILABLE  Compressed: NO  Tag: TAG20110707T003012
        Piece Name: /bak/rman/oracle11/bkup_s4mgq28m_1_1
 


控制文件在数据库的恢复过程中占着极为重要的地位,控制文件是数据库中非常重要的一个文件,由于一般情况下数据库的系统改变和数据库的备份信息一般都是存放于控制文件中的,缺少控制文件就意味着数据库无法打开,因此在进行数据恢复时通常是必不可少的。检查控制文件是否正常备份完成,可以看到控制文件最近一次备份时间为2011年5月20日,由于控制文件没有及时备份,所以给后期的恢复带来一定的难度,即数据库进行不完全恢复后,为确保数据库能够打开,需要进行重建控制文件。
 
oracle@/tmp$ rman target /
RMAN> list backup of controlfile;
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
701     Full    11.17M     DISK        00:00:01     20-5鏈?-11     
        BP Key: 701   Status: AVAILABLE  Compressed: NO  Tag: TAG20110520T025529
        Piece Name: /opt/oracle/flash_recovery_area/ORACLE11/autobackup/2011_05_20/o1_mf_s_751604129_6xd7ml37_.bkp
  Control File Included: Ckp SCN: 50782285     Ckp time: 20-5鏈?-11
 
进一步检查控制文件为什么备份不成功的原因,查看备份日志,进一步检查发现,由于控制文件备份至默认目录,而默认目录有2G限制是控制文件备份失效的根本原因。
 
Starting Control File and SPFILE Autobackup at 02-JUL-11
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of Control File and SPFILE Autobackup command on ORA_DISK_1 channel at 07/02/2011 00:05:33
ORA-19809: ???????????
ORA-19804: ???? 52428800 ?????? (? 2147483648 ???)  
尽管控制文件在恢复过程中占有重要地位,但从理论上来讲,只要备份集存在,数据库即可恢复。故进一步检查操作系统中是否存在完全备份(0级备份)和不完全备份集(1级备份)。
 
oracle@/bak/rman/oracle11$ ls -rlt
total 34742144
-rw-r-----    1 oracle   oinstall  347345920 Jun 28 00:30 bkup_qvmfvmgd_1_1
-rw-r-----    1 oracle   oinstall  186720256 Jun 28 00:34 bkup_r0mfvmh0_1_1
-rw-r-----    1 oracle   oinstall     535552 Jun 28 00:35 bkup_r1mfvmpk_1_1
-rw-r-----    1 oracle   oinstall  370257408 Jun 29 00:30 bkup_r3mg2asd_1_1
-rw-r-----    1 oracle   oinstall  182525952 Jun 29 00:34 bkup_r4mg2asv_1_1
-rw-r-----    1 oracle   oinstall     400896 Jun 29 00:34 bkup_r5mg2b5j_1_1
-rw-r-----    1 oracle   oinstall  645861376 Jun 30 00:30 bkup_r7mg4v8e_1_1
-rw-r-----    1 oracle   oinstall  385867776 Jun 30 00:35 bkup_r8mg4v90_1_1
-rw-r-----    1 oracle   oinstall     401408 Jun 30 00:35 bkup_r9mg4vhu_1_1
-rw-r-----    1 oracle   oinstall  301780480 Jul 01 00:30 bkup_rbmga80c_1_1
-rw-r-----    1 oracle   oinstall  147243008 Jul 01 00:34 bkup_rcmga80m_1_1
-rw-r-----    1 oracle   oinstall     419840 Jul 01 00:35 bkup_rdmga89k_1_1
-rw-r-----    1 oracle   oinstall  351975936 Jul 02 00:00 bkup_rfmgcqk6_1_1
-rw-r-----    1 oracle   oinstall 11931287552 Jul 02 00:05 bkup_rgmgcqkm_1_1
-rw-r-----    1 oracle   oinstall    4994560 Jul 02 00:05 bkup_rhmgcqu8_1_1
-rw-r-----    1 oracle   oinstall  382163968 Jul 03 00:30 bkup_rjmgfgoh_1_1
-rw-r-----    1 oracle   oinstall  184246272 Jul 03 00:33 bkup_rkmgfgot_1_1
-rw-r-----    1 oracle   oinstall     254464 Jul 03 00:33 bkup_rlmgfgvl_1_1
-rw-r-----    1 oracle   oinstall  434937344 Jul 04 00:30 bkup_rnmgi54d_1_1
-rw-r-----    1 oracle   oinstall  178962432 Jul 04 00:33 bkup_romgi54n_1_1
-rw-r-----    1 oracle   oinstall     196096 Jul 04 00:33 bkup_rpmgi5bg_1_1
-rw-r-----    1 oracle   oinstall  378692096 Jul 05 00:30 bkup_rrmgkpgd_1_1
-rw-r-----    1 oracle   oinstall  176324608 Jul 05 00:33 bkup_rsmgkpgn_1_1
-rw-r-----    1 oracle   oinstall     244224 Jul 05 00:33 bkup_rtmgkpn5_1_1
-rw-r-----    1 oracle   oinstall  412761600 Jul 06 00:30 bkup_rvmgndsc_1_1
-rw-r-----    1 oracle   oinstall  199688192 Jul 06 00:33 bkup_s0mgndsm_1_1
-rw-r-----    1 oracle   oinstall     232960 Jul 06 00:33 bkup_s1mgne34_1_1
-rw-r-----    1 oracle   oinstall  405035008 Jul 07 00:30 bkup_s3mgq28c_1_1
-rw-r-----    1 oracle   oinstall  176324608 Jul 07 00:33 bkup_s4mgq28m_1_1
-rw-r-----    1 oracle   oinstall     240128 Jul 07 00:33 bkup_s5mgq2fe_1_1  


二、 数据库恢复
由于是将数据恢复到同一主机的不同目录,因此对应的参数文件中的目录都将发生改变,需要对数据文件进行从新建立。为了使得同一主机能够启动不同实例的数据库,创建以下参数文件,同时对参数文件中修改的目录进行建立。
对应参数文件中目录建立:
mkdir -p /opt/oracle/admin/zhoul/adump
mkdir -p /bak/zhoul
mkdir -p /opt/oracle
 
*.audit_file_dest='/opt/oracle/admin/zhoul/adump'
*.audit_trail='db'
*.compatible='11.1.0.0.0'
*.control_files='/bak/zhoul/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='oracle11'
*.diagnostic_dest='/opt/oracle'
*.memory_max_target=493942784
*.memory_target=493942784
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=0
*.processes=100
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=335
*.sga_target=0
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='zhoul'
 

三、 进行数据库恢复,
由于恢复至不同目录,需要设置每个数据文件的恢复路径。
数据库恢复是一个应用数据库备份数据文件集来恢复数据库的过程,数据库中没有归档日志,所以需要有对应的0级和1级增量备份来做恢复的基础。也就是对应的完全备份集和不完全备份集。通过RMAN中得set newname for…..将备份数据文件集更改到对应的数据文件路径,并将数据restore到指定的新路径,set newname for datafile之后用switch datafileall来刷新control file中对应的记录,需要注意的是该命令的粒度是数据文件级别。
由于数据库需要不完全恢复至2011年7月4日,也就是说我们只需要7月4号前的数据就可以了,我们只要将7月4日的不完全备份简单重命名,使得Oracle无法识别对应的数据集。
oracle@/bak/rman/oracle11$ mv  bkup_rnmgi54d_1_1  bkup_rnmgi54d_1_1.bak
oracle@/bak/rman/oracle11$ mv  bkup_romgi54n_1_1  bkup_romgi54n_1_1.bak  

通过执行run批处理计划进行数据的恢复应用。
通过set newname for…..将更改对应的数据文件路径,并将数据restore到指定的新路径下面。set newname for datafile之后需要用switch datafileall来刷新control file中对应的记录

RMAN> run {
2> set newname for datafile 1 to '/bak/zhoul/oradata/system01.dbf';
3> set newname for datafile 2 to '/bak/zhoul/oradata/sysaux01.dbf';
4> set newname for datafile 3 to '/bak/zhoul/oradata/undotbs01.dbf';
5> set newname for datafile 4 to '/bak/zhoul/oradata/users01.dbf';
6> set newname for datafile 5 to '/bak/zhoul/oradata/system02';
7> set newname for datafile 6 to '/bak/zhoul/oradata/undotbs02.dbf';
8> set newname for datafile 7 to '/bak/zhoul/oradata/trng.dbf';
9> set newname for datafile 8 to '/bak/zhoul/oradata/trng_idx_01.dbf';
10> set newname for datafile 9 to '/bak/zhoul/oradata/AS_BASE_DATA.dbf';
11> set newname for datafile 10 to '/bak/zhoul/oradata/AS_BASE_INDX.dbf';
12> set newname for datafile 11 to '/bak/zhoul/oradata/FA_400_BASE_DATA.dbf';
13> set newname for datafile 12 to '/bak/zhoul/oradata/FA_400_BASE_INDX.dbf';
14> set newname for datafile 13 to '/bak/zhoul/oradata/AS_CONF_DATA01.dbf';
15> set newname for datafile 14 to '/bak/zhoul/oradata/AS_CONF_INDX01.dbf';
16> set newname for datafile 15 to '/bak/zhoul/oradata/AS_PRJ1_DATA.dbf';
17> set newname for datafile 16 to '/bak/zhoul/oradata/AS_PRJ1_INDX.dbf';
18> set newname for datafile 17 to '/bak/zhoul/oradata/AS_SAND_DATA.dbf';
19> set newname for datafile 18 to '/bak/zhoul/oradata/AS_SAND_INDX.dbf';
20> set newname for datafile 19 to '/bak/zhoul/oradata/AS_L10N_DATA01.dbf';
21> set newname for datafile 20 to '/bak/zhoul/oradata/AS_L10N_INDX01.dbf';
22> set newname for datafile 21 to '/bak/zhoul/oradata/FA_400_CONF_DATA.dbf';
23> set newname for datafile 22 to '/bak/zhoul/oradata/FA_400_CONF_INDX.dbf';
24> set newname for datafile 23 to '/bak/zhoul/oradata/FA_400_PRJ1_DATA.dbf';
25> set newname for datafile 24 to '/bak/zhoul/oradata/FA_400_PRJ1_INDX.dbf';
26> set newname for datafile 25 to '/bak/zhoul/oradata/LTK_DATAT01.dbf';
27> set newname for datafile 26 to '/bak/zhoul/oradata/FA_400_SAND_DATA.dbf';
28> set newname for datafile 27 to '/bak/zhoul/oradata/FA_400_L10N_DATA.dbf';
29> set newname for datafile 28 to '/bak/zhoul/oradata/FA_400_L10N_INDX.dbf';
30> set newname for datafile 29 to '/bak/zhoul/oradata/AS_BPR1_DATA.dbf';
31> set newname for datafile 30 to '/bak/zhoul/oradata/AS_BPR1_INDX.dbf';
32> set newname for datafile 31 to '/bak/zhoul/oradata/FA_400_BPR1_DATA.dbf';
33> set newname for datafile 32 to '/bak/zhoul/oradata/FA_400_BPR1_INDX.dbf';
34> set newname for datafile 33 to '/bak/zhoul/oradata/FA_400_SAND_INDX.dbf';
35> set newname for datafile 34 to '/bak/zhoul/oradata/AS_TRNG_DATA01.dbf';
36> set newname for datafile 35 to '/bak/zhoul/oradata/FA_400_TRNG_DATA01.dbf';
37> set newname for datafile 36 to '/bak/zhoul/oradata/AS_TRNG_INDX01';
38> set newname for datafile 37 to '/bak/zhoul/oradata/FA_400_TRNG_INDX01';
39> set newname for datafile 38 to '/bak/zhoul/oradata/AS_TRAN_DATA01.dbf';
40> set newname for datafile 39 to '/bak/zhoul/oradata/AS_TRAN_INDX01.dbf';
41> set newname for datafile 40 to '/bak/zhoul/oradata/FA_400_TRAN_DATA01.dbf';
42> set newname for datafile 41 to '/bak/zhoul/oradata/FA_400_TRAN_INDX01.dbf';
43> set newname for datafile 42 to '/bak/zhoul/oradata/qnpc';
44> set newname for datafile 43 to '/bak/zhoul/oradata/AS_TEST_DATA.dbf';
45> set newname for datafile 44 to '/bak/zhoul/oradata/AS_TEST_INDX.dbf';
46> set newname for datafile 45 to '/bak/zhoul/oradata/FA_400_TEST_DATA.dbf';
47> set newname for datafile 46 to '/bak/zhoul/oradata/FA_400_TEST_INDX.dbf';
48> restore database;
49> switch datafile all;
50> recover database noredo;
51> }  
四、 重建控制文件,需要注意的是重建控制文件时,由于Oracle存在bug,需要将oracle11G生产数据库实例关闭,才能重建成功。
控制文件的重建,控制文件重建最简单的方法就是通过备份控制文件进行,但是由于数据库对于控制文件没有及时备份,所以没有最新的备份控制文件,因此我们可以通过获得重建控制文件的脚本,通过脚本来进行控制文件的重建。
SQL> alter database backup controlfile to trace;
在udump下我们可以寻找到最新的trace文件,在此文件中就包含了最新生成的当前控制文件的一些参数及生成语法,我们可以通过对该文件进行修改从而获得对应的重建控制文件的脚本。
 
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORACLE11" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 5 (
    '/bak/zhoul/oradata/redo05_1.log',
    '/bak/zhoul/oradata/redo05_2.log'
  ) SIZE 100M,
  GROUP 6 (
    '/bak/zhoul/oradata/redo06_1.log',
    '/bak/zhoul/oradata/redo06_2.log'
  ) SIZE 100M,
  GROUP 7 (
    '/bak/zhoul/oradata/redo07_1.log',
    '/bak/zhoul/oradata/redo07_2.log'
  ) SIZE 100M,
  GROUP 8 (
    '/bak/zhoul/oradata/redo08_1.log',
    '/bak/zhoul/oradata/redo08_2.log'
  ) SIZE 100M,
  GROUP 9 (
    '/bak/zhoul/oradata/redo09_1.log',
    '/bak/zhoul/oradata/redo09_2.log'
  ) SIZE 100M,
  GROUP 10 (
    '/bak/zhoul/oradata/redo10_1.log',
    '/bak/zhoul/oradata/redo10_2.log'
  ) SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  '/bak/zhoul/oradata/system01.dbf',
  '/bak/zhoul/oradata/sysaux01.dbf',
  '/bak/zhoul/oradata/undotbs01.dbf',
  '/bak/zhoul/oradata/users01.dbf',
  '/bak/zhoul/oradata/system02',
  '/bak/zhoul/oradata/undotbs02.dbf',
  '/bak/zhoul/oradata/trng.dbf',
  '/bak/zhoul/oradata/trng_idx_01.dbf',
  '/bak/zhoul/oradata/AS_BASE_DATA.dbf',
  '/bak/zhoul/oradata/AS_BASE_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_BASE_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_BASE_INDX.dbf',
  '/bak/zhoul/oradata/AS_CONF_DATA01.dbf',
  '/bak/zhoul/oradata/AS_CONF_INDX01.dbf',
  '/bak/zhoul/oradata/AS_PRJ1_DATA.dbf',
  '/bak/zhoul/oradata/AS_PRJ1_INDX.dbf',
  '/bak/zhoul/oradata/AS_SAND_DATA.dbf',
  '/bak/zhoul/oradata/AS_SAND_INDX.dbf',
  '/bak/zhoul/oradata/AS_L10N_DATA01.dbf',
  '/bak/zhoul/oradata/AS_L10N_INDX01.dbf',
  '/bak/zhoul/oradata/FA_400_CONF_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_CONF_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_PRJ1_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_PRJ1_INDX.dbf',
  '/bak/zhoul/oradata/LTK_DATAT01.dbf',
  '/bak/zhoul/oradata/FA_400_SAND_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_L10N_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_L10N_INDX.dbf',
  '/bak/zhoul/oradata/AS_BPR1_DATA.dbf',
  '/bak/zhoul/oradata/AS_BPR1_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_BPR1_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_BPR1_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_SAND_INDX.dbf',
  '/bak/zhoul/oradata/AS_TRNG_DATA01.dbf',
  '/bak/zhoul/oradata/FA_400_TRNG_DATA01.dbf',
  '/bak/zhoul/oradata/AS_TRNG_INDX01',
  '/bak/zhoul/oradata/FA_400_TRNG_INDX01',
  '/bak/zhoul/oradata/AS_TRAN_DATA01.dbf',
  '/bak/zhoul/oradata/AS_TRAN_INDX01.dbf',
  '/bak/zhoul/oradata/FA_400_TRAN_DATA01.dbf',
  '/bak/zhoul/oradata/FA_400_TRAN_INDX01.dbf',
  '/bak/zhoul/oradata/qnpc',
  '/bak/zhoul/oradata/AS_TEST_DATA.dbf',
  '/bak/zhoul/oradata/AS_TEST_INDX.dbf',
  '/bak/zhoul/oradata/FA_400_TEST_DATA.dbf',
  '/bak/zhoul/oradata/FA_400_TEST_INDX.dbf'
CHARACTER SET ZHS16CGB231280;  


五、 将数据库打开
重建控制文件之后,只需要将数据库简单打开即可,数据库就恢复到了2011年7月4日。
 
SQL>alter database open resetlogs;  
 ------------------------------------------------------------------------------------

原博客地址:http://blog.itpub.net/23732248/
原作者:应以峰 (frank-ying)
-------------------------------------------------------------------------------------

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23732248/viewspace-1482795/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23732248/viewspace-1482795/

最后

以上就是玩命大门为你收集整理的RMAN一次RMAN将数据库不完全恢复的全部内容,希望文章能够帮你解决RMAN一次RMAN将数据库不完全恢复所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部