当前位置:数据库 > Oracle >>

Oracle不完全恢复

Oracle不完全恢复
 
Sql代码  
不完全恢复  
  
指的恢复到某一个时间点,在这个时间点scn之后的操作会全部消失  
recover datafile until scn xxxx;  
  
recover database until scn xxxx;  
recover database until sequence xx;--恢复到哪个日志文件截止  
recover database until xx;--恢复到哪个时间点  
  
--此时,数据文件头上的scn会小于控制文件的scn号,需要resetlogs才能打开数据库。  
alter database open resetlogs;  
  
--当resetlogs打开后,数据库会重置redo日志,redo文件也会重建。控制文件的scn回退到与数据文件一致。  
  
sys@ORCL> select * from v$log;  
  
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME  
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------  
         1          1          0   52428800          1 YES UNUSED                       0  
         2          1          0   52428800          1 YES UNUSED                       0  
         3          1          1   52428800          1 NO  CURRENT               13808014 17-7月 -13  
  
--resetlog的模式,若为了恢复数据,建议在其他机器上进行恢复,然后同步到生产环境中。  
  
  
当前状态的在线重做日志文件丢失(不存在备份)  
  
需要不完全恢复,原理就是使用数据库备份恢复,然后利用日志(重做日志和在线重做日志)恢复到最大的scn,即当前状态的在线重做日志的上一个  
已备份的日志截止scn。  
  
最后需要recover database until cancel命令打开数据库。 即恢复到输入cancel的那一刻  
通过  
alter database open resetlog;--打开数据库  
  
  
  
--当非当前日志(状态为inactive)丢失,或损坏时,不会影响数据库,因为事务都已经写入数据库  
  
alter database drop logfile group 3;  
alter database clear logfile group 3;  
  
alter database add logfile group 2 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG' size 50m; 
  
--简单测试了下,当shutdown abort后,数据库不会做checkpoint,所以日志文件状态仍为active,当active的非当前日志丢失后,  
--无法通过restore恢复,恢复后仍会提示logfile不存在,也无法drop掉,提示实例恢复仍需要。  
  
--当resetlog恢复后,resetlog备份集仍可以使用。它会自动跳过resetlog之后的日志文件,及使用resetlog之后重置的日志文件进行恢复。  
  
  
--当控制文件损坏,恢复的方法有两种  
1.利用trace语句备份的控制文件进行恢复  
alter database backup controlfile to trace as 'c:\a.txt';--生成控制文件的备份至c盘的a.txt文件  
alter database backup controlfile to trace as 'c:\a.txt' resetlogs;--生成resetlog模式的控制信息  
alter database backup controlfile to trace as 'c:\a.txt' noresetlogs;--生成noresetlog模式的控制信息  
  
--NORESETLOGS选项生成的控制文件语句仅仅用在 当前版本的在线日志是可用的状态。  
--RESTLOGS选项用在在线日志不可用的状态  
  
  
  
alter database backup control file to trace;--备份到控制文件到trace文件中。  
  
生成的trace文件信息如下:  
  
STARTUP NOMOUNT  --nomount状态打开数据库,因为控制文件损坏  
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG  
    MAXLOGFILES 16   --最大日志文件数  
    MAXLOGMEMBERS 3 --日志文件的镜像最多有三个,此参数在10g不起作用,限制不住  
    MAXDATAFILES 100 --控制文件预留的空间大小,要能保留100个数据文件的记录。当增大此数,会自动增加控制文件的大小  
    MAXINSTANCES 8 --最大的实例个数,实际上可以超过8个  
    MAXLOGHISTORY 292 --日志的历史的条数限制  
LOGFILE --日志文件  
  GROUP 1 (  
    'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG',  
    'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\LOG\REDO04.LOG'  
  ) SIZE 50M,  
  GROUP 2 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,  
  GROUP 3 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M  
  
DATAFILE  
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',  
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',  
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',  
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',  
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',  
  'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF'  
CHARACTER SET ZHS16GBK --字符集  
;  
  
  
select * from $archived_log;--归档日志的信息  
select * from v$log_history;--日志i切换就记录,当非归档模式,也可以从此查看  
  
创建日志镜像  
alter database add logfile member 'F:\oracle\product\10.2.0\oradata\orcl\LOG\redo04.log' to group 1;  
  
--当增加数据文件,或者增加日志文件时,建议通过trace的方式备份下控制文件。  

 

  
2.利用rman catalog模式下,恢复控制文件  
  
只能启动到nomount状态,控制文件损坏,Oracle无法判断其target DB,因为一个catalog DB对应多个target DB。  
需要通过DBID告诉Oracle需要恢复那个target DB。  
rman target sys/system@orcl catalog rman/rman@test  
set dbid=xxxxxxxx  
list backup of controlfile;  
restore controlfile--Oracle通过以下参数寻找恢复控制文件的位置 show parameter control_files  
--恢复后,启动到mount状态会发现控制文件的checkpoint_change#比数据文件的checkpoint_change#小。  
需要以下命令进行启动  
recover database using backup controlfile;--告诉Oracle此控制文件是旧的    
  
auto--输入auto,Oracle会自动根据备份的archive log进行恢复,但不是真正恢复,应该是Oracle内部在做检查 
    --直到恢复到当前联机日志,提示找不到备份文件。这是因为控制文件损坏,Oracle不知道这些信息  
  
再次输入  
recover database using backup controlfile;  
 --需要手工指定当前联机日志文件的位置。  
  
 F:\oracle\product\10.2.0\oradata\orcl\REDO01.LOG  
  
 --最后输入以下命令,打开数据库  
  
 alter database open with resetlogs;  
  
  
  
一致性备份指冷备份,shutdown之后的os copy  
select  
* from v$flash_recovery_area_usage;  
--闪回恢复区存放以下几类文件  
1.控制文件(CONTROL FILE AUTOBACKUP)  
2.在线日志  
3.归档日志  
4.rman 备份片  
5.rman image copy 备份(COPY DATAFILE 4 to 'C:\xx.dbf')  
6.闪回日志  
  
show parameter db_recovery;  
select * from v$flash_recovery_area_usage;  
--监控闪回恢复区的大小  
  
--数据库失败的类型  
1.实例失败  
2.数据库失败 --媒介失败  

 

 
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,