Oracle 备份恢复原理 博客分类: Oracle 管理
程序员文章站
2024-03-22 12:55:22
...
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;
推荐阅读
-
Oracle 备份恢复原理 博客分类: Oracle 管理
-
ORACLE用户自动被锁解决方法 博客分类: oracle OracleSQL数据结构配置管理脚本
-
ORACLE用户自动被锁解决方法 博客分类: oracle OracleSQL数据结构配置管理脚本
-
spring 声明式事务管理与oracle的inactive会话。 博客分类: 我的文章 OracleSpring配置管理SQLDAO
-
浅谈企业应用架构(一) 博客分类: 架构乱弹 企业应用设计模式项目管理Oracle领域模型
-
Linux下安装配置Oracle 博客分类: oracle/管理 linuxoracleinstall
-
Ubuntu 6.10上安装Oracle 10g 博客分类: 数据库 OracleUbuntuSQLRedHat配置管理
-
Ubuntu 6.10上安装Oracle 10g 博客分类: 数据库 OracleUbuntuSQLRedHat配置管理
-
RMAN恢复数据库ORA-01861错误 博客分类: Oracle oraclermanora-01861
-
Redhat 5 下 Oracle10g 安装 修改版 博客分类: DB管理 RedHatOracleLinuxcuisuqiangGCC