Oracle 备份恢复原理

Oracle 的工作模式:
1.Archive
2.Noarchive.

归档模式实际上是保留重做日志文件的副本(当在线重做日志切换时),当数据库down掉时,可以利用以前的备份文件+重做日志(归档及online模式)进行恢复。
查看归档模式
此命令只能是sysdba的权限才可以执行。
SQL>Archive log list;

若是DBA权限,需要下面的语句查看
SELECT log_mode from v$database.

归档和非归档如何转换?
1.启动到Amount状态 
sys@ORCL> startup mount
2.启动到归档模式
sys@ORCL> alter database archivelog;
sys@ORCL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     295
下一个存档日志序列   297
当前日志序列           297
3.正常启动
alter database open;

归档日志保存的位置:

sys@ORCL> show parameter DB_RECOVERY_FILE_DEST

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      F:\oracle\product\10.2.0\db_1/
                                                 flash_recovery_area
db_recovery_file_dest_size           big integer 2G

--查看重做日志的信息
SELECT 
GROUP#,--第几组日志
SEQUENCE#, --标示重做日志的唯一标示
BYTES,--日志文件大小
ARCHIVED,--标示是否已经归档
STATUS,--状态
FIRST_CHANGE#,--此日志文件记录的SCN开始
FIRST_TIME--日志文件记录开始时间
FROM V$LOG;

select * from v$logfile;--重做日志文件

--切换日志状态,改变当前归档日志
alter system switch logfile;

--归档当前日志文件,并切换日志(只能使用在归档模式下)
alter system archive log current;

------------------------------------------------------------------------------------------------------------
--另外一个重要的概念,SCN(SYSTEM CHANGE NUMBER)
SCN是Oracle的内部时钟


查询系统的SCN,此SCN是大约每隔三秒种增加1
sys@ORCL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                12342762
--另外一个查询方式,此查询每次都会增加1
SELECT CURRENT_SCN FROM v$database;


--查看归档日志的内容

SELECT 
SEQUENCE#,--日志文件标示
FIRST_CHANGE#, --日志文件记录的开始SCN(为上条记录的NEXT_CHANGE#)
NEXT_CHANGE# --日志文件记录的结束SCN
FROM V$ARCHIVED_LOG;

--备份恢复原理

数据库打开的必要条件,这两个视图中的CHECKPOINT_CHANGE需要一致。
v$datafile_header 来之与数据文件,v$datafile信息来之与控制文件。
若数据文件由于问题损坏,使用备份文件+重做日志完成恢复(增大数据文件的SCN号)。

sys@ORCL> select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1           12344521
         2           12344521
         3           12344521
         4           12344521
         5           12344521
sys@ORCL> select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1           12344521
         2           12344521
         3           12344521
         4           12344521
         5           12344521

----备份恢复的种类
--注意备份文件最好存放在另外的磁盘上。
1.完全脱机备份(ARIVELOG|NOARCHIVELOG)

缺点:
需要shutdown
物理拷贝整个文件,而不是有用的数据。

非归档模式(NOARCHIVELOG)只能使用此方式,shutdown之后,进行物理备份。
备份的内容包括:
数据文件(包括undo文件,可以不包括临时文件),
日志文件,
控制文件,(只备份一个就ok,其他都是镜像文件)

当使用此模式恢复时(全部文件复制回去),数据会有所丢失。数据时截止到备份的时间点。

归档模式下(ARCHIVELOG),把备份的文件进行恢复。
数据库打开时,提示介质恢复,输入命令

sys@ORCL> recover datafile 4

  ORA-00279: 更改 12344520 (在 06/15/2013 10:48:14 生成) 对于线程 1 是必需的
  ORA-00289: 建议:
  F:\ORACLE\PRODUCT\10.2.0\DB_1\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_06_16\O1_MF_1_305_%U_.ARC
  ORA-00280: 更改 12344520 (用于线程 1) 在序列 #305 中
  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

输入enter 即使用建议的归档日志恢复。
或者数据绝对路径进行恢复。
Auto是全部按照Oracle建议的归档文件进行恢复。
CANCEl是取消恢复

12344520实际上对应的是4号数据文件的文件头号。

当需要使用的归档日志可以使用online重做日志时,就不会于提示,直数据接进行恢复。
当完全恢复完成之后,会发现数据文件头上的SCN号小一相对于控制文件,但没有影响。

若想同时恢复多个数据文件,可以直接使用以下命令:
recover database;

当恢复完后,
Alter database open;

2.部分脱机备份(tablespace offline)

实际上利用tablespace offline后进行物理备份。
当tablespace offline时,Oracle会自动的把此表空间的相关数据写入表空间中。所以此数据文件的SCN会高一些相比其他数据文件

缺点:备份时,相应的表空间上的数据无法读取。
SYSTEM和UNDO表空间都不能offline备份。
经测试,临时表空间也是不能offline的。

恢复过程:
拷贝备份文件至数据文件目录,执行 alter tablespace online.提示需要恢复
执行recover datafile xx;
恢复完之后,alter tablespace online.当执行完后,Oracle会同时更新此数据文件在控制文件及文件头上的SCN号至最新。

此恢复过程可以在数据库OPEN状态下进行。

完全检查点实现时,全部的数据文件会同步检查点号。会以两个方式实现此功能:
  1.shutdown
  2.alter system checkpoint;

-- 当临时表空的文件被删除时,数据库仍然可以启动。Oracle会自动创建一个临时表空间文件。

3.部分联机备份

此备份必须在archive 模式进行,否则报错 ORA-01123: 无法启动联机备份; 未启用介质恢复
缺点:
备份方式采用os copy,数据文件仍处于online状态,有可能出现问题。出现一个块中不一致的数据。
举例,假设你正在备份第100个块在users.dbf文件中。假设os copy读取整个数据块同时DBWR正在更新这个block。在这种情况下,os copy读取了
旧的前半块的数据,和新的数据在块的另一半。这种情况属于破损的块,这个块上的数据在一个scn上是不一致的。
·针对这种情况,Oracle采用了一种保护机制,当表空间处于backup mode(联机备份),每次一个块被改变前,数据库会写整个块的前镜像入redo
中,修改后,也会记录这种变化到redo log中。当恢复时,数据库针对这种破损的块,会先恢复块前镜像,及使用redo中的变化进行恢复。
此方式会导致增加许多redo log。
RMAN不会使用此方式,因为RMAN是Oracle进程备份,不会出现这种破损的块。



备份命令
alter tablespace users begin backup;

查看部分联机备份情况
SELECT  
FILE#, --文件号
STATUS,--ACTIVE标示处于备份状态
CHANGE#,--记录处理备份状态的SCN号
TIME
FROM V$BACKUP;

OS copy表空间的文件。

结束备份
alter tablespace users end backup;

通过观察,当设置表空间为部分联机备份后,数据文件头上面的SCN号会一直保留在当时的SCN上。直到END backup。
但不会影响此表空间上的数据查询及DML语句。

备份整个数据库

alter database begin backup;
alter database end backup;

猜你喜欢

转载自yangeoo.iteye.com/blog/1892567