Oracle 物理备份的种类以及完全恢复
完全脱机备份(冷备份)(noarchivelog | archivelog)
- 优点:安全
- 缺点: OS Copy(生产环境,数据文件较大)
- 缺点:需要shutdown(生产环境,风险较大)
部分脱机备份(表空间tablespace offline,相当于局部的shutdown)
- 缺点:OS Copy - 整个数据文件的拷贝,没有解析出有效数据
- 有些表空间无法offline - system, undo
SQL > alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1 :
ORA - 01541 : system tablespace cannot be brought offline; shut down if necessary
SQL > alter tablespace UNDOTBS1 offline;
alter tablespace UNDOTBS1 offline
*
ERROR at line 1 :
ORA - 30042 : Cannot offline the undo tablespace - offilne + copy + online
SQL > alter tablespace SYSAUX offline;
Tablespace altered.
SQL > alter tablespace SYSAUX online;
Tablespace altered. - 案例:损坏sample数据文件
-- 插入系列数据到指定tablespace,之后offile指定tablespace
SQL > alter tablespace "sample" offline;
Tablespace altered.
-- ========== 删除 指定tablespace==========
-- online指定tablespace,会报错:无法锁定
SQL > alter tablespace "sample" online;
alter tablespace "sample" online
*
ERROR at line 1 :
ORA - 01157 : cannot identify / lock data file 5 - see DBWR trace file
ORA - 01110 : data file 5 : ' E:\ORACLE\WPENG\WPENG\SAMPLE.DBF '
-- 此时数据库显示open状态,没有shutdown
SQL > select status from v$instance;
STATUS
-- ----------
OPEN
-- ======== copy恢复之前的备份tablespace =======
-- 再次online 指定tablespace,报错:需要介质恢复(数据文件和控制文件的scn不相符)
SQL > alter tablespace "sample" online;
alter tablespace "sample" online
*
ERROR at line 1 :
ORA - 01113 : file 5 needs media recovery
ORA - 01110 : data file 5 : ' E:\ORACLE\WPENG\WPENG\SAMPLE.DBF '
-- 控制文件 和 数据文件头的 SCN 不符
SQL > select file #, checkpoint_change# from v$datafile where file # = 5 ;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
5 2798236
SQL > select file #, checkpoint_change# from v$datafile_header where file # = 5 ;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
5 0
-- 进行recover 恢复 datafile 5
SQL > recover datafile 5 ;
ORA - 00279 : change 2798091 generated at 09 / 29 / 2012 09 : 13 : 56 needed for thread 1
ORA - 00289 : suggestion : E:\APP\WPENG\PRODUCT\ 11.1 . 0 \FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_09_ 29 \O1_MF_1_127_86DLZ4TD_
.ARC
ORA - 00280 : change 2798091 for thread 1 is in sequence # 127
Specify log : { < RET >= suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
-- 第三次online datafile 5,成功
SQL > alter tablespace "sample" online;
Tablespace altered.
-- 查看控制文件和数据文件头的SCN
SQL > select file #, checkpoint_change# from v$datafile where file # = 5 ;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
5 2798388
SQL > select file #, checkpoint_change# from v$datafile_header where file # = 5 ;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
5 2798388 - 哪个数据文件坏了,可以offline哪个
SQL > alter database datafile 5 offline;
Database altered.
SQL > alter database datafile 5 online;
alter database datafile 5 online
*
ERROR at line 1 :
ORA - 01113 : file 5 needs media recovery
ORA - 01110 : data file 5 : ' E:\ORACLE\WPENG\WPENG\SAMPLE.DBF '
SQL > recover datafile 5 ;
Media recovery complete.
SQL > alter database datafile 5 online;
Database altered. - 非归档模式,表空间是不可以offline的
部分联机备份(热备份)
- 不需要shutdown + 不需要offline
- 记录数据恢复的起点SCN,就是数据文件头的checkpoint_change#
SQL > alter tablespace USERS begin backup ;
表空间已更改。
-- 记录数据库恢复的起点
SQL > select file #, checkpoint_change# from v$datafile_header;
FILE # CHECKPOINT_CHANGE#
-- -------- ------------------
1 1177691
2 1164232
3 1164232
4 1177920
SQL > select * from v$ backup ;
FILE # STATUS CHANGE# TIME
-- -------- ------------------ ---------- --------------
1 NOT ACTIVE 1177691 12 - 10月 - 12
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 ACTIVE 1177920 12 - 10月 - 12
-- ========COPY需要备份的数据文件==========
SQL > alter tablespace USERS end backup ;
表空间已更改。
-- ==========RECOVER的时候,会从记录的BEGIN处开始恢复
SQL > recover datafile 4
ORA - 00279 : 更改 1177920 (在 10 / 12 / 2012 14 : 00 : 48 生成) 对于线程 1 是必需的
ORA - 00289 : 建议:
C:\APP\WPENG\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2012_10_ 12 \O1_MF_1_29_87HDP56C_
.ARC
ORA - 00280 : 更改 1177920 (用于线程 1 ) 在序列 # 29 中
指定日志: { < RET >= suggested | filename | AUTO | CANCEL}
- 缺点:仅仅只是记录数据头的checkpoint_change#,但是数据文件其他部分会发生变化
- 操作系统的块大小:512 bytes;数据库系统的块大小:8K(16个操作系统块)。我们备份copy的时候(512 bytes),数据库系统可能会修改数据块(8K)。 备份出去的文件是正确的;但是对于数据库逻辑上,可能是不一致的,导致不可用的情况发生。
- Oracle规定:凡事数据文件处于热备份模式下,有进程操作这个数据文件上的数据块 - Oracle会首先对这个数据块进行备份,以日志的形式进行备份。
- 处于热备份的情况,参照上述,那么数据块将会产生多余平常情况下的日志文件 - 而且是多了多!!!
-
SQL > select distinct sid from v$mystat;由此可以看到,同样的SQL语句,执行相同的操作,在热备份模式下数据库的日志文件会增加8840 bytes;而在正常模式下,数据的日志文件仅仅增加496 bytes
SID
-- --------
47
SQL > select STATISTIC#, NAME from v$statname where name = ' redo size ' ;
STATISTIC# NAME
-- -------- ------------------------------------------------------------
169 redo size
SQL > select * from v$mystat where sid = 47 and statistic# = 169 ;
SID STATISTIC# VALUE
-- -------- ---------- ----------
47 169 0
SQL > select * from t;
ID SCN
-- -------- ----------
11 1178189
12 1178215
13 1178223
14 1178238
15 1178252
SQL > select * from v$mystat where sid = 47 and statistic# = 169 ;
SID STATISTIC# VALUE
-- -------- ---------- ----------
47 169 116
SQL > insert into t values ( 1 , 1 );
已创建 1 行。
SQL > select * from v$mystat where sid = 47 and statistic# = 169 ;
SID STATISTIC# VALUE
-- -------- ---------- ----------
47 169 116
SQL > commit ;
提交完成。
SQL > select * from v$mystat where sid = 47 and statistic# = 169 ;
SID STATISTIC# VALUE
-- -------- ---------- ----------
47 169 612
SQL > alter tablespace USERS begin backup ;
表空间已更改。
SQL > select * from v$mystat where sid = 47 and statistic# = 169 ;
SID STATISTIC# VALUE
-- -------- ---------- ----------
47 169 1328
SQL > insert into t values ( 1 , 1 );
已创建 1 行。
SQL > commit ;
提交完成。
SQL > select * from v$mystat where sid = 47 and statistic# = 169 ;
SID STATISTIC# VALUE
-- -------- ---------- ----------
47 169 10168
SQL > select 10168 - 1328 from dual;
10168 - 1328
-- --------
8840
SQL > select 612 - 116 from dual;
612 - 116
-- --------
496
SQL > alter tablespace USERS end backup ;
表空间已更改。