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博客 ” ,链接:https://blog.itpub.net/28813259/viewspace-772007/ ,如需转载,请注明出处,否则将追究法律责任。