ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 物理备份-热备份之用户管理备份(user-managed backup and recovery)

物理备份-热备份之用户管理备份(user-managed backup and recovery)

原创 Linux操作系统 作者:hexel 时间:2013-09-01 20:07:34 0 删除 编辑

1. 热备份:
 

用户管理的热备份需要把表空间设置成备份状态, 

(1) 查看数据文件是否处于备份状态: 

sys@HX> select * from v$backup;                      

     FILE#|STATUS            |   CHANGE#|TIME 

----------|------------------|----------|------------------- 

         1|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         2|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         3|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         4|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

        24|NOT ACTIVE        |         0| 

        29|NOT ACTIVE        |         0| 

21 rows selected.
 

(2) 设置表空间HR为备份状态:
 

sys@HX> select file_name from dba_data_files where tablespace_name='HR'; 

FILE_NAME 

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

/u01/oradata2/hx/hr.dbf 


 

sys@HX> alter tablespace hr begin backup; 

Tablespace altered. 


 

sys@HX> select * from v$backup;               

     FILE#|STATUS            |   CHANGE#|TIME 

----------|------------------|----------|------------------- 

         1|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         2|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         3|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         4|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

        24|NOT ACTIVE        |         0| 

        29|ACTIVE            |   9728203|2013-09-01 14:46:50 

(3) 拷贝数据文件:
 

sys@HX> ho cp /u01/oradata2/hx/hr.dbf /u01/oradata2/hx/hr.dbf.bak 

(4) 拷贝控制文件
 

sys@HX> ho cp /u01/oradata2/hx/control01.ctl /u01/oradata2/hx/control01.ctl.bak 

(5) 备份归档文件 

RMAN>  backup recovery area to DESTINATION "/u01"; 

(6) 结束热备份: 

 alter tablespace hr endbackup; 

sys@HX> select * from v$backup;                                   

     FILE#|STATUS            |   CHANGE#|TIME 

----------|------------------|----------|------------------- 

         1|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         2|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         3|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

         4|NOT ACTIVE        |    846963|2013-03-31 21:44:20 

        24|NOT ACTIVE        |         0| 

        29|NOT ACTIVE        |   9728203|2013-09-01 14:46:50 

(7) 备份期间的redo 

热备份期间复制数据时,由于unix一般以512bytes为单位复制数据,而oracle以8k为单位,如果插入数据频繁,这会使得一个数据块上的数据不一致,所以,有必要在重做日志中记录修改的行的前镜像,这样在恢复时,oracle可以使用日志文件中记录的前镜像覆盖备份,完成恢复。

查看备份期间的redo_size:

sys@HX> select * from v$logfile; 

    GROUP#|STATUS |TYPE   |MEMBER                                  |IS_ 

----------|-------|-------|----------------------------------------|--- 

         3|       |ONLINE |/u01/oradata2/hx/redo03.log             |NO 

         2|       |ONLINE |/u01/oradata2/hx/redo02.log             |NO 

         1|       |ONLINE |/u01/oradata2/hx/redo01.log             |NO 

sys@HX> select GROUP#,STATUS  from v$log; 

    GROUP#|STATUS 

----------|---------------- 

         1|INACTIVE 

         2|ACTIVE 

         3|CURRENT 

创建视图,用于统计redo_size:

CREATE OR replace view redo_size as 

 select value  

 from v$mystat,v$statname 

  where v$mystat.statistic#=v$statname.statistic# 

  and v$statname.name='redo size'; 

  sys@HX> select * from redo_size; 

     VALUE 

---------- 

      9652 

sys@HX> alter tablespace hr begin backup; 

Tablespace altered. 


 

hr@HX> update student set age=20; 

hr@HX> commit; 

sys@HX> select * from redo_size;          

     VALUE 

---------- 

     10424 


 

sys@HX> alter system dump logfile '/u01/oradata2/hx/redo03.log'; 


 

REDO RECORD - Thread:1 RBA: 0x00004b.000002eb.0010 LEN: 0x2050 VLD: 0x05 

SCN: 0x0000.0094764b SUBSCN:  1 09/01/2013 15:21:42 

(LWN RBA: 0x00004b.000002eb.0010 LEN: 0019 NST: 0001 SCN: 0x0000.0094764a) 

CHANGE #1 TYP:3 CLS:1 AFN:29 DBA:0x07402b9b OBJ:99970 SCN:0x0000.0094760f SEQ:4 OP:18.1 ENC:0 RBL:0 

Log block image redo entry   (热备份期间产生的redo日志) 

Dump of memory from 0x00007FD9006BD020 to 0x00007FD9006BF008 

7FD9006BD020 00000001 00018682 0094760D 00000000  [.........v......] 

7FD9006BD030 00320003 07402B98 000A0014 0000068F  [..2..+@.........] 

7FD9006BD040 00000000 00000000 00008000 00937607  [.............v..] 

7FD9006BD050 001C0013 000008F7 05C01D00 001C0167  [............g...] 

7FD9006BD060 00008000 009475FB 001A0010 0000090F  [.....u..........] 

7FD9006BD070 054005C9 0017010B 00012004 0094760F  [..@...... ...v..] 

7FD9006BD080 00000000 00000000 00040100 001AFFFF  [................] 

7FD9006BD090 1F151F1B 00001F16 1F2F0004 1F5B1F1B  [........../...[.] 

7FD9006BD0A0 00001F70 00000000 00000000 00000000  [p...............] 

7FD9006BD0B0 00000000 00000000 00000000 00000000  [................] 

        Repeat 494 times 

7FD9006BEFA0 2C000000 C2030503 31011F03 021FC102  [...,.......1....] 

这个特性受到隐含参数影响:

set linesize 120 

col name for a30 

col value for a20 

col describ for a60 

select x.ksppinm name, y.ksppstvl value, x.ksppdesc describ 

from sys.x$ksppi x,sys.x$ksppcv y 

where x.indx = y.indx 

and x.ksppinm like '%&par%' 

sys@HX> / 

Enter value for par: log_blocks 

old   4: and x.ksppinm like '%&par%' 

new   4: and x.ksppinm like '%log_blocks%' 

NAME                          |VALUE               |DESCRIB 

------------------------------|--------------------|----------------------------------------------------------- 

_log_blocks_during_backup     |TRUE                |log block images when changed during backup 

2. 热备份恢复 

有了备份文件,数据库运行在归档模式下,即使数据文件丢失,也可以使用备份文件实现完全恢复。
 

2.1 模拟数据文件丢失的情况:

SYS> alter database begin backup;   

(1)切换日志文件,进行多次归档:

sys@HX> alter system switch logfile;  

sys@HX> alter system switch logfile;  

sys@HX> alter system switch logfile;  

(2)复制数据文件:

oracle[~/oradata2]$cp hx/*.dbf hx.bak -f   

oracle[~/oradata2]$cp soc/*.dbf soc.bak -f      

(3)结束备份:

sys@HX> alter database end backup; 

(4)正常关闭数据库,删除数据文件后打开:

SYS> startup; 

ORACLE instance started. 

Total System Global Area| 417546240|bytes 

Fixed Size              |   2228944|bytes 

Variable Size           | 348130608|bytes 

Database Buffers        |  58720256|bytes 

Redo Buffers            |   8466432|bytes 

Database mounted. 

ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件 

ORA-01110: 数据文件 1: '/u01/oradata2/hx/system01.dbf' 

(5)使用备份的文件进行恢复

oracle[~/oradata2/soc]$mv  ../soc.bak/*.DBF ../soc -f 

oracle[~/oradata2/soc]$mv ../hx.bak/*.dbf ../hx -f 

SYS> alter database open; 

alter database open 

* 

ERROR at line 1: 

ORA-01113: 文件 1 需要介质恢复 

ORA-01110: 数据文件 1: '/u01/oradata2/hx/system01.dbf' 

recover应用归档和重做日志,进行完安全恢复。 


 

SYS> recover database; 

ORA-00279: 更改 9773544 (在 09/01/2013 17:36:33 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_4_9262q6kb_.arc 

ORA-00280: 更改 9773544 (用于线程 1) 在序列 #4 中 


Specify log: {=suggested | filename | AUTO | CANCEL} 

auto 

ORA-00279: 更改 9773577 (在 09/01/2013 17:37:42 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_5_9262q7kd_.arc 

ORA-00280: 更改 9773577 (用于线程 1) 在序列 #5 中 


 

ORA-00279: 更改 9773580 (在 09/01/2013 17:37:42 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_6_9262qc77_.arc 

ORA-00280: 更改 9773580 (用于线程 1) 在序列 #6 中 


 

ORA-00279: 更改 9773583 (在 09/01/2013 17:37:46 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_7_9262qd13_.arc 

ORA-00280: 更改 9773583 (用于线程 1) 在序列 #7 中 


 

ORA-00279: 更改 9773586 (在 09/01/2013 17:37:47 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_8_9262r5s3_.arc 

ORA-00280: 更改 9773586 (用于线程 1) 在序列 #8 中 


 

ORA-00279: 更改 9773598 (在 09/01/2013 17:38:13 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_9_9262r6o0_.arc 

ORA-00280: 更改 9773598 (用于线程 1) 在序列 #9 中 

2.2 模拟日志文件丢失的状况:
 

(1)丢失的是非当前日志文件: 

启动到mount状态,重建redo日志即可。 

SYS> startup mount; 

SYS> alter database clear logfile group 2; 

归档模式则使用下面语句重建日志文件:
 

SYS> alter database clear unarchived logfile group 2; 

也可以先删除这个日志文件,重新建立。
 

SYS> alter database drop logfile group 2;s 

SYS> alter database add logfile group 2 ('/u01/oradata2/hx/redo02.log') size 50m; 

SYS> alter database open; 

(2)丢失当前使用的重做日志文件:
 

SYS> alter database open; 

alter database open 

* 

ERROR at line 1: 

ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员 

ORA-00312: 联机日志 2 线程 1: '/u01/oradata2/hx/redo02.log' 

ORA-27037: 无法获得文件状态 

Linux-x86_64 Error: 2: No such file or directory 

Additional information: 3 

由于是异常关闭,当前重做日志未归档,而且包含提交但是未写入数据文件的数据,所以只能进行不完全恢复,然后用restlogs选项打开数据库。
 

操作步骤如下:
 

SYS> alter system set "_allow_resetlogs_corruption"=true scope=spfile 

SYS> shutdown immediate; 

ORA-01109: 数据库未打开 

Database dismounted. 

ORACLE instance shut down. 

SYS> startup mount; 

recover database using backup controlfile until cancel; 

SYS> recover database using backup controlfile until cancel; 

ORA-00279: 更改 9854387 (在 09/01/2013 18:14:08 生成) 对于线程 1 是必需的 

ORA-00289: 建议: /u01/fast_recovery_area/hx/HEXEL/archivelog/2013_09_01/o1_mf_1_20_%u_.arc 

ORA-00280: 更改 9854387 (用于线程 1) 在序列 #20 中 

Specify log: {=suggested | filename | AUTO | CANCEL} 

cancel 

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below 

ORA-01194: file 1 needs more recovery to be consistent 

ORA-01110: data file 1: '/u01/oradata2/hx/system01.dbf' 

ORA-01112: 未启动介质恢复 


SYS> alter database open resetlogs; 

SYS> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SYS> startup; 

 alter system set "_allow_resetlogs_corruption"=false scope=spfile 

SYS> shutdown immediate; 

SYS> startup; 

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

上一篇: mongodb聚合
请登录后发表评论 登录
全部评论

注册时间:2013-04-18

  • 博文量
    11
  • 访问量
    67508