Oracle 备份恢复
Oracle 的工作模式:1.Archive2.Noarchive.归档模式实际上是保留重做日志文件的副本(当在线重做日志切换时),当数据库down掉时,可以利用以前的备份文件+重做日志(归档及online模式)进行恢复。查看归档模式此命令只能是sysdba的权限才可以执行。SQL>Archive log list;若是DBA权限,需要下面的语句查看SELECT log_mode from v$database.归档和非归档如何转换?1.启动到Amount状态 sys@ORCL> startup mount2.启动到归档模式sys@ORCL> alter database archivelog;sys@ORCL> archive log list;数据库日志模式 存档模式自动存档 启用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 295下一个存档日志序列 297当前日志序列 2973.正常启动alter database open;归档日志保存的位置:sys@ORCL> show parameter DB_RECOVERY_FILE_DESTNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string F:\oracle\product\10.2.0\db_1/ flash_recovery_areadb_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是大约每隔三秒种增加1sys@ORCL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;GET_SYSTEM_CHANGE_NUMBER------------------------ 12342762--另外一个查询方式,此查询每次都会增加1SELECT CURRENT_SCN FROM v$database;--查看归档日志的内容SELECT SEQUENCE#,--日志文件标示FIRST_CHANGE#, --日志文件记录的开始SCN(为上条记录的NEXT_CHANGE#)NEXT_CHANGE# --日志文件记录的结束SCNFROM V$ARCHIVED_LOG;--备份恢复原理数据库打开的必要条件,这两个视图中的CHECKPOINT_CHANGE需要一致。v$datafile 来之与数据文件,v$datafile_header信息来之与控制文件。若数据文件由于问题损坏,使用备份文件+重做日志完成恢复(增大数据文件的SCN号)。sys@ORCL> select file#,checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE#---------- ------------------ 1 12344521 2 12344521 3 12344521 4 12344521 5 12344521sys@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号TIMEFROM V$BACKUP;OS copy表空间的文件。结束备份alter tablespace users end backup;通过观察,当设置表空间为部分联机备份后,数据文件头上面的SCN号会一直保留在当时的SCN上。直到END backup。但不会影响此表空间上的数据查询及DML语句。备份整个数据库alter database begin backup;alter database end backup;
?