Oracle 数据库灾难性环境下恢复实例

数据库 Oracle
所谓灾难性是指磁盘故障或其它原因导致数据库相关的文件全部丢失或损坏无法进行修复,必须通过备份进行还原恢复;以下实验模拟丢失所有数据库文件,然后通过备份进行还原恢复。

所谓灾难性是指磁盘故障或其它原因导致数据库相关的文件全部丢失或损坏无法进行修复,必须通过备份进行还原恢复;以下实验模拟丢失所有数据库文件,然后通过备份进行还原恢复。

版本和数据库文件信息

  1. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
  2. PL/SQL Release 11.2.0.3.0 - Production 
  3. CORE    11.2.0.3.0      Production 
  4. TNS for Linux: Version 11.2.0.3.0 - Production 
  5. NLSRTL Version 11.2.0.3.0 - Production 
  6.  
  7. SQL> column name format a50 
  8. SQL> select file#,status,name from v$datafile; 
  9.  
  10.     FILE# STATUS  NAME 
  11. ---------- ------- -------------------------------------------------- 
  12.          1 SYSTEM  /u01/oradata/sydb/system01.dbf 
  13.          2 ONLINE  /u01/oradata/sydb/sysaux01.dbf 
  14.          3 ONLINE  /u01/oradata/sydb/undotbs01.dbf 
  15.          4 ONLINE  /u01/oradata/sydb/users01.dbf 
  16.          5 ONLINE  /u01/oradata/sydb/tbs01.dbf 
  17.  
  18. SQL> column member format a50 
  19. SQL> select * from v$Logfile; 
  20.  
  21.     GROUP# STATUS  TYPE    MEMBER                                             IS_ 
  22. ---------- ------- ------- -------------------------------------------------- --- 
  23.          1         ONLINE  /u01/oradata/sydb/REDO01.LOG                       NO 
  24.          2         ONLINE  /u01/oradata/sydb/REDO02.LOG                       NO 
  25.  
  26. SQL> select * from v$controlfile; 
  27.  
  28. STATUS  NAME                                               IS_ BLOCK_SIZE FILE_SIZE_BLKS 
  29. ------- -------------------------------------------------- --- ---------- -------------- 
  30.         /u01/oradata/sydb/control01.ctl                    NO       16384            668 

备份数据库

注意:备份数据库时如果配置了 configure exclude for tablespace tbsname 的表空间是不会进行备份的,恢复表空间备份configure exclude for tablespace tbsname clear;如果没有设置自动备份控制文件和参数文件,要在备份脚本最后手动添加备份控制文件脚本;设置自动备份控制文件和参数文件:

  1. CONFIGURE CONTROLFILE AUTOBACKUP On;  
  2. CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/%F_%d_controlfile.bkp';  

控制文件名格式必须包含%F,%F的格式为:c-IIIIIIIIII-YYYYMMDD-QQ,IIIIIIIIII(10位)代表DBID发生灾难时可以通过它知道数据库ID,YYYYMMDD代表自动备份时的timestamp,QQ代表是十六进制的序列号,起始值为:00,最大值为:FF。 开始备份数据

  1.  run 
  2.  { 
  3.  allocate channel dev type disk; 
  4.  allocate channel dev2 type disk; 
  5.  backup incremental level 0 database plus archivelog delete input 
  6.  tag 'sydb_incr_level0' 
  7.  format '/u01/backup/%d_%s_%U'
  8.  release channel dev; 
  9.  release channel dev2; 
  10.  } 
  11.  
  12. allocated channel: dev 
  13. channel dev: SID=181 device type=DISK 
  14.  
  15. allocated channel: dev2 
  16. channel dev2: SID=18 device type=DISK 
  17.  
  18.  
  19. Starting backup at 29-MAY-15 
  20. current log archived 
  21. channel dev: starting archived log backup set 
  22. channel dev: specifying archived log(s) in backup set 
  23. input archived log thread=1 sequence=17 RECID=1 STAMP=880994007 
  24. channel dev: starting piece 1 at 29-MAY-15 
  25. channel dev2: starting archived log backup set 
  26. channel dev2: specifying archived log(s) in backup set 
  27. input archived log thread=1 sequence=18 RECID=2 STAMP=880994016 
  28. input archived log thread=1 sequence=19 RECID=3 STAMP=880994311 
  29. channel dev2: starting piece 1 at 29-MAY-15 
  30. channel dev: finished piece 1 at 29-MAY-15 
  31. piece handle=/u01/backup/SYDB_1_01q85q07_1_1 tag=SYDB_INCR_LEVEL0 comment=NONE 
  32. channel dev: backup set complete, elapsed time: 00:00:07 
  33. channel dev: deleting archived log(s) 
  34. archived log file name=/u01/app/product/11.2.3/db_1/dbs/arch1_17_880905808.dbf RECID=1 STAMP=880994007 
  35. channel dev2: finished piece 1 at 29-MAY-15 
  36. piece handle=/u01/backup/SYDB_2_02q85q07_1_1 tag=SYDB_INCR_LEVEL0 comment=NONE 
  37. channel dev2: backup set complete, elapsed time: 00:00:08 
  38. channel dev2: deleting archived log(s) 
  39. archived log file name=/u01/app/product/11.2.3/db_1/dbs/arch1_18_880905808.dbf RECID=2 STAMP=880994016 
  40. archived log file name=/u01/app/product/11.2.3/db_1/dbs/arch1_19_880905808.dbf RECID=3 STAMP=880994311 
  41. Finished backup at 29-MAY-15 
  42.  
  43. Starting backup at 29-MAY-15 
  44. channel dev: starting incremental level 0 datafile backup set 
  45. channel dev: specifying datafile(s) in backup set 
  46. input datafile file number=00001 name=/u01/oradata/sydb/system01.dbf 
  47. input datafile file number=00004 name=/u01/oradata/sydb/users01.dbf 
  48. input datafile file number=00005 name=/u01/oradata/sydb/tbs01.dbf 
  49. channel dev: starting piece 1 at 29-MAY-15 
  50. channel dev2: starting incremental level 0 datafile backup set 
  51. channel dev2: specifying datafile(s) in backup set 
  52. input datafile file number=00003 name=/u01/oradata/sydb/undotbs01.dbf 
  53. input datafile file number=00002 name=/u01/oradata/sydb/sysaux01.dbf 
  54. channel dev2: starting piece 1 at 29-MAY-15 
  55. channel dev: finished piece 1 at 29-MAY-15 
  56. piece handle=/u01/app/product/11.2.3/db_1/dbs/03q85q0f_1_1 tag=TAG20150529T163839 comment=NONE 
  57. channel dev: backup set complete, elapsed time: 00:00:35 
  58. channel dev2: finished piece 1 at 29-MAY-15 
  59. piece handle=/u01/app/product/11.2.3/db_1/dbs/04q85q0f_1_1 tag=TAG20150529T163839 comment=NONE 
  60. channel dev2: backup set complete, elapsed time: 00:00:35 
  61. Finished backup at 29-MAY-15 
  62.  
  63. Starting backup at 29-MAY-15 
  64. current log archived 
  65. channel dev: starting archived log backup set 
  66. channel dev: specifying archived log(s) in backup set 
  67. input archived log thread=1 sequence=20 RECID=4 STAMP=880994354 
  68. channel dev: starting piece 1 at 29-MAY-15 
  69. channel dev: finished piece 1 at 29-MAY-15 
  70. piece handle=/u01/backup/SYDB_5_05q85q1i_1_1 tag=SYDB_INCR_LEVEL0 comment=NONE 
  71. channel dev: backup set complete, elapsed time: 00:00:01 
  72. channel dev: deleting archived log(s) 
  73. archived log file name=/u01/app/product/11.2.3/db_1/dbs/arch1_20_880905808.dbf RECID=4 STAMP=880994354 
  74. Finished backup at 29-MAY-15 
  75.  
  76. Starting Control File and SPFILE Autobackup at 29-MAY-15 
  77. piece handle=/u01/backup/c-3634177744-20150529-00_control.bkp comment=NONE 
  78. Finished Control File and SPFILE Autobackup at 29-MAY-15 
  79.  
  80. released channel: dev 
  81.  
  82. released channel: dev2 

通过备份日志可以知道哪些数据文件被备份,哪些没有被备份或没有备份成功,比如:发现较多数据块损坏、表空间被排除备份(exclude)、表空间被skip;关注这些信息非常重要,因为一旦灾难发生,它意味着你的数据库恢复成功率,也有助于对备份脚本的优化和调整。

#p#

验证数据库可恢复性

验证可恢复性可以发现一些忽略的问题,及时处理;

  1. rm /u01/oradata/sydb/system01.dbf 
  2. rm /u01/oradata/sydb/sysaux01.dbf 
  3. rm /u01/oradata/sydb/undotbs01.dbf 
  4. rm /u01/oradata/sydb/tbs01.dbf 
  5. rm /u01/oradata/sydb/control01.ctl 
  6. rm /u01/oradata/sydb/REDO01.LOG  
  7. rm /u01/oradata/sydb/REDO02.LOG  
  8. rm /u01/app/product/11.2.3/db_1/dbs/spfilesydb.ora 

数据库恢复

恢复参数文件和控制文件

数据库启动时会先查找spfile,然后在找spfile.ora,再找文件initpfile,如果这些文件都没有找到报错并停止启动;so 先创建一个基本的init pfile;

  1. $ vim /u01/app/product/11.2.3/db_1/dbs/initsydb.ora 
  2. db_name='sydb' 
  3. memory_target=200m 
  4. control_files='/u01/oradata/sydb/control01.ctl' 
  5. db_block_size=32768 

如果你的数据块大小为非8kb,你又想在恢复控制文件后完成其它操作,如mount控制文件,则你必须在init 文件中指定数据块大小;

  1. SQL> startup nomount 
  2. ORACLE instance started. 
  3.  
  4. Total System Global Area  208769024 bytes 
  5. Fixed Size                  2226936 bytes 
  6. Variable Size             109053192 bytes 
  7. Database Buffers           92274688 bytes 
  8. Redo Buffers                5214208 bytes 
  9.  
  10. $ rman target / 
  11. RMAN> restore spfile from '/u01/backup/c-3634177744-20150529-00_control.bkp'
  12.  
  13. Starting restore at 29-MAY-15 
  14. using channel ORA_DISK_1 
  15.  
  16. channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/backup/c-3634177744-20150529-00_control.bkp 
  17. channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete 
  18. Finished restore at 29-MAY-15 
  19.  
  20. RMAN> restore controlfile from '/u01/backup/c-3634177744-20150529-00_control.bkp'
  21.  
  22. Starting restore at 29-MAY-15 
  23. using channel ORA_DISK_1 
  24.  
  25. channel ORA_DISK_1: restoring control file 
  26. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  27. output file name=/u01/oradata/sydb/control01.ctl 
  28. Finished restore at 29-MAY-15 
  29. RMAN> alter database mount; 
  30.  
  31. database mounted 
  32. released channel: ORA_DISK_1 

查看备份文件和确定可恢复的最大归档日志序列

注:如果目录名发生改变或文件发生位置移动,先使用 catalog start with '/dir' 将文件catalog;

  1. RMAN> list backup of database
  2.  
  3.  
  4. List of Backup Sets 
  5. =================== 
  6.  
  7.  
  8. BS Key  Type LV Size       Device Type Elapsed Time Completion Time 
  9. ------- ---- -- ---------- ----------- ------------ --------------- 
  10. 3       Incr 0  180.53M    DISK        00:00:29     29-MAY-15       
  11.         BP Key: 3   Status: AVAILABLE  Compressed: NO  Tag: TAG20150529T163839 
  12.         Piece Name: /u01/app/product/11.2.3/db_1/dbs/04q85q0f_1_1 
  13.   List of Datafiles in backup set 3 
  14.   File LV Type Ckp SCN    Ckp Time  Name 
  15.   ---- -- ---- ---------- --------- ---- 
  16.   2    0  Incr 436655     29-MAY-15 /u01/oradata/sydb/sysaux01.dbf 
  17.   3    0  Incr 436655     29-MAY-15 /u01/oradata/sydb/undotbs01.dbf 
  18.  
  19. BS Key  Type LV Size       Device Type Elapsed Time Completion Time 
  20. ------- ---- -- ---------- ----------- ------------ --------------- 
  21. 4       Incr 0  380.94M    DISK        00:00:29     29-MAY-15       
  22.         BP Key: 4   Status: AVAILABLE  Compressed: NO  Tag: TAG20150529T163839 
  23.         Piece Name: /u01/app/product/11.2.3/db_1/dbs/03q85q0f_1_1 
  24.   List of Datafiles in backup set 4 
  25.   File LV Type Ckp SCN    Ckp Time  Name 
  26.   ---- -- ---- ---------- --------- ---- 
  27.   1    0  Incr 436654     29-MAY-15 /u01/oradata/sydb/system01.dbf 
  28.   4    0  Incr 436654     29-MAY-15 /u01/oradata/sydb/users01.dbf 
  29.   5    0  Incr 436654     29-MAY-15 /u01/oradata/sydb/tbs01.dbf 
  30.  
  31. RMAN> list backup of archivelog all
  32.  
  33.  
  34. List of Backup Sets 
  35. =================== 
  36.  
  37.  
  38. BS Key  Size       Device Type Elapsed Time Completion Time 
  39. ------- ---------- ----------- ------------ --------------- 
  40. 1       45.49M     DISK        00:00:04     29-MAY-15       
  41.         BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: SYDB_INCR_LEVEL0 
  42.         Piece Name: /u01/backup/SYDB_1_01q85q07_1_1 
  43.  
  44.   List of Archived Logs in backup set 1 
  45.   Thrd Seq     Low SCN    Low Time  Next SCN   Next Time 
  46.   ---- ------- ---------- --------- ---------- --------- 
  47.   1    17      427739     29-MAY-15 436110     29-MAY-15 
  48.  
  49. BS Key  Size       Device Type Elapsed Time Completion Time 
  50. ------- ---------- ----------- ------------ --------------- 
  51. 2       43.37M     DISK        00:00:04     29-MAY-15       
  52.         BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: SYDB_INCR_LEVEL0 
  53.         Piece Name: /u01/backup/SYDB_2_02q85q07_1_1 
  54.  
  55.   List of Archived Logs in backup set 2 
  56.   Thrd Seq     Low SCN    Low Time  Next SCN   Next Time 
  57.   ---- ------- ---------- --------- ---------- --------- 
  58.   1    18      436110     29-MAY-15 436484     29-MAY-15 
  59.   1    19      436484     29-MAY-15 436643     29-MAY-15 
  60.  
  61. BS Key  Size       Device Type Elapsed Time Completion Time 
  62. ------- ---------- ----------- ------------ --------------- 
  63. 5       90.00K     DISK        00:00:00     29-MAY-15       
  64.         BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: SYDB_INCR_LEVEL0 
  65.         Piece Name: /u01/backup/SYDB_5_05q85q1i_1_1 
  66.  
  67.   List of Archived Logs in backup set 5 
  68.   Thrd Seq     Low SCN    Low Time  Next SCN   Next Time 
  69.   ---- ------- ---------- --------- ---------- --------- 
  70.   1    20      436643     29-MAY-15 436756     29-MAY-15 

#p#

从上面的信息中可以看出最大可恢复到的日志序列为20,恢复时设置until sequence 21,数据库即可应用所有的归档日志;

  1. RMAN> restore database until sequence 21; 
  2.  
  3. Starting restore at 29-MAY-15 
  4. using channel ORA_DISK_1 
  5.  
  6. channel ORA_DISK_1: starting datafile backup set restore 
  7. channel ORA_DISK_1: specifying datafile(s) to restore from backup set 
  8. channel ORA_DISK_1: restoring datafile 00001 to /u01/oradata/sydb/system01.dbf 
  9. channel ORA_DISK_1: restoring datafile 00004 to /u01/oradata/sydb/users01.dbf 
  10. channel ORA_DISK_1: restoring datafile 00005 to /u01/oradata/sydb/tbs01.dbf 
  11. channel ORA_DISK_1: reading from backup piece /u01/app/product/11.2.3/db_1/dbs/03q85q0f_1_1 
  12. channel ORA_DISK_1: piece handle=/u01/app/product/11.2.3/db_1/dbs/03q85q0f_1_1 tag=TAG20150529T163839 
  13. channel ORA_DISK_1: restored backup piece 1 
  14. channel ORA_DISK_1: restore complete, elapsed time: 00:00:25 
  15. channel ORA_DISK_1: starting datafile backup set restore 
  16. channel ORA_DISK_1: specifying datafile(s) to restore from backup set 
  17. channel ORA_DISK_1: restoring datafile 00002 to /u01/oradata/sydb/sysaux01.dbf 
  18. channel ORA_DISK_1: restoring datafile 00003 to /u01/oradata/sydb/undotbs01.dbf 
  19. channel ORA_DISK_1: reading from backup piece /u01/app/product/11.2.3/db_1/dbs/04q85q0f_1_1 
  20. channel ORA_DISK_1: piece handle=/u01/app/product/11.2.3/db_1/dbs/04q85q0f_1_1 tag=TAG20150529T163839 
  21. channel ORA_DISK_1: restored backup piece 1 
  22. channel ORA_DISK_1: restore complete, elapsed time: 00:00:35 
  23. Finished restore at 29-MAY-15 
  24.  
  25. RMAN> recover database until sequence 21; 
  26.  
  27. Starting recover at 29-MAY-15 
  28. using channel ORA_DISK_1 
  29.  
  30. starting media recovery 
  31.  
  32. channel ORA_DISK_1: starting archived log restore to default destination 
  33. channel ORA_DISK_1: restoring archived log 
  34. archived log thread=1 sequence=20 
  35. channel ORA_DISK_1: reading from backup piece /u01/backup/SYDB_5_05q85q1i_1_1 
  36. channel ORA_DISK_1: piece handle=/u01/backup/SYDB_5_05q85q1i_1_1 tag=SYDB_INCR_LEVEL0 
  37. channel ORA_DISK_1: restored backup piece 1 
  38. channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 
  39. archived log file name=/u01/app/product/11.2.3/db_1/dbs/arch1_20_880905808.dbf thread=1 sequence=20 
  40. media recovery complete, elapsed time: 00:00:01 
  41. Finished recover at 29-MAY-15 

使用resetlogs 方式打开数据库

  1. SYS@sydb>select file#,d.name as "FILE_NAME",t.name as "TABLESPACE_NAME",status,enabled,checkpoint_change#,checkpoint_time,(bytes/1024/1024)"BYTES_MB",blocks, 
  2.   2  (create_bytes/1024/1024)create_bytes_mb,block_size   
  3.   3  from v$datafile d left join v$tablespace t 
  4.   4  on d.ts#=t.ts#; 
  5.  
  6. FILE#   FILE_NAME TABLESPACE_NAME    STATUS  ENABLED  CHECKPOINT_CHANGE# CHECKPOIN  BYTES_MB  BLOCKS CREATE_BYTES_MB BLOCK_SIZE 
  7. ------------------------------ ------- ---------- ------------------ --------- ---------- ---------- --------------- ---------- 
  8. 1  /u01/oradata/sydb/system01.dbf  SYSTEM    SYSTEM  READ WRITE  436756      29-MAY-15   400.8125  12826   100     32768 
  9. 2  /u01/oradata/sydb/sysaux01.dbf  SYSAUX    ONLINE  READ WRITE 436756       29-MAY-15   227.6875 7286     100     32768 
  10. 3  /u01/oradata/sydb/undotbs01.dbf UNDOTBS01  ONLINE  READ WRITE 436756      29-MAY-15   310       9920    100    32768 
  11. 4  /u01/oradata/sydb/users01.dbf    USERS     ONLINE  READ WRITE 436756      29-MAY-15   100       3200    100     32768 
  12. 5  /u01/oradata/sydb/tbs01.dbf     TBS01      ONLINE  READ WRITE 436756      29-MAY-15   98       3136     10     32768 
  13.  
  14. Elapsed: 00:00:00.02 
  15. SYS@sydb>alter database open resetlogs; 
  16.  
  17. Database altered. 
  18.  
  19. Elapsed: 00:00:07.41 

总结

任何时候数据库的还原和恢复因环境和错误的不一而不同,认真有效的阅读文档,理解工作原理,然后在加上重复的实验方能起到良好的效果,实验本身是动手实践的步骤,但同时也是理论实践结合的强有效方式。

博文出处:http://www.cnblogs.com/lanston/archive/2015/05/30/db_disaster_recover.html

责任编辑:Ophira 来源: cnblogs
相关推荐

2011-04-12 15:44:08

Oracle数据库

2011-05-18 10:49:53

Oralce数据库

2014-12-04 10:05:18

2021-04-04 22:39:50

Ubiquiti数据泄漏黑客

2011-05-19 13:25:14

Oracle数据库

2015-06-05 10:13:09

2011-03-29 10:47:49

ORACLE数据库

2011-05-25 10:56:19

Oracle数据库Unix环境优化

2011-05-26 09:36:07

Oracle数据库Redo故障

2011-02-28 13:31:17

Oracle数据库

2009-11-20 13:29:59

Oracle数据库恢复

2010-04-02 13:59:08

Oracle数据库

2022-11-03 13:47:26

云迁移云计算转型

2016-11-14 13:56:14

2010-08-25 10:16:48

DB2备份Linux

2023-09-21 09:31:24

MySQL数据库

2011-05-11 13:25:57

Oracle数据库后备恢复

2009-04-03 10:54:49

Oracle备份恢复

2011-03-24 17:21:42

Oracle数据库Redo故障

2009-04-10 00:42:36

数据库历史性备份
点赞
收藏

51CTO技术栈公众号