【oracle】摸拟故障 - 数据文件丢失恢复,SCN的作用。

模拟数据文件丢失恢复,redolog、archivelog、controlfile文件未丢失的情况恢复。

1、  创建一个表空间、用户、分配权限、建表。

a)   createtablespace HXW_WEN

datafile‘D:\ORACLE\ORADATA\HXW168\HXW_WEN_D01.DBF‘

size5M autoextendonnext1M maxsize20M;

b)createuser wen identifiedby zerostudy defaulttablespace hxw_wen;

c)grantdbato wen;

d)grantexecuteon dbms_flashback to wen; --dba不用

e)createtable t1(idnumber,scnnumber,insertdate date);

f)createsequence seq_wen_autoid incrementby1startwith1maxvalue99999999cyclenocache;--序列

g)insertinto t1

values(seq_wen_autoid.nextval,dbms_flashback.get_system_change_number,sysdate); --先不插入数据

2、scn与归档日志关系

事务对应的scn如果落在了哪个archivelog里,那么这个archivelog在恢复时就被用到。

使用下面语句插入数据:

insertinto t1

values(seq_wen_autoid.nextval,dbms_flashback.get_system_change_number,sysdate);

查看日志信息:

select a.GROUP#,a.SEQUENCE#,a.STATUS,a.FIRST_CHANGE#,a.NEXT_CHANGE#,b.MEMBER from v$log a,v$logfile b where a.GROUP#=b.GROUP#;

重复插入并switch logfile:

select SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#,NAMEfrom v$archived_log

若是要恢复ID为6的数据,那么需要75号归档日志文件。

Oracle通过scn把多个归档日志文件组成一个大的逻辑文件,所有连续的归档日志可以看作是某段时间对oracle数据库操作的日志信息的一个独立大文件。即物理上独立,逻辑上统一。

3、模拟数据库在有数据的情况下丢失数据文件

a)关闭数据,复制一份hxw_wen_d01.dbf文件(丢失多个数据文件一个数据文件恢复步骤一样)。

脱机备份,需要备份:

控制文件(重要)、数据文件(临时文件不用备份)、redolog文件(重要)、归档日志文件(重要)、参数文件、口令文件。

select*from  v$parameter wherenamelike‘%control_files%‘

select*from dba_data_files

select*from v$logfile

show parameter log_archive_dest

b)启动数据库,进行增删改操作:

当前数据:

添加数据:重复下面的动作。

SQL> insert into t1values(seq_wen_autoid.nextval,dbms_flashback.get_system_chan

ge_number,sysdate);

SQL> commit;

SQL> alter system switch logfile;

再添加二条数据,但不提交事务。

20     970159 2014/10/01 12:03:47

21     970160 2014/10/01 12:03:48

摸拟数据库异常,并且导致hxw_wen_d01.dbf文件丢失。要求恢复的记录有id19的数据。

注:未提交的事务,oracle会自动rollback。

Shutting down instance (abort)

License high water mark = 8

USER (ospid: 4232): terminating theinstance

Instance terminated by USER, pid = 4232

Wed Oct 01 12:05:09 2014

Instance shutdown complete

关闭数据库,然后把hxw_wen_d01.dbf文件改名,启动数据库报错提示如下:

现在启动到mount状态:

查看scn值:

由于6号文件丢失,所以v$datafile_header查的scn值为0。

把备份的(旧的)dbf文件复制回来。

4、  数据文件恢复

旧的备份文件已复制回来,此时Alter database open;提示需要介质恢复。

恢复数据文件6号或者恢复数据库都可以,命令如下:

Recover datafile 6;

Recover database; --多个数据文件丢失时可以直接用这个。

恢复过程如下:

由于归档日志都在原位置,所以不用指定文件,可以直接输入auto也可以直接回车。

恢复时只用到归档日志80号,81、82没有用到。

上面操作小总结:恢复数据文件,就是通过归档日志来提升旧数据文件的scn 号,提升过程中,需要从归档日志或者redolog中找到对数据库的操作记录,重新在数据文件、buffer操作一次。达到恢复到所需要的时间点的数据。

参考:

  1. 百度
  2. http://www.itpub.net/thread-1065138-1-3.html
时间: 2024-10-12 07:35:23

【oracle】摸拟故障 - 数据文件丢失恢复,SCN的作用。的相关文章

【非关键性数据文件丢失(可以脱机数据文件的丢失)-恢复-1】

非关键性数据文件丢失(可以脱机数据文件的丢失): run{ sql 'alter database datafile <> offline'; restore datafile <>; recover datafile <>; slq 'alter database datafile <> online'; } 除了system.undo_tablespace参数后值对应的表空间都可以采用以上的办法恢复. [[email protected] ~]$ ls

MD3200存储中虚拟机数据文件丢失的数据恢复过程

简介: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服务瘫痪,虚拟机无法使用,故障环境为Windows Server 2012服务器,系统中部署了Hyper-V虚拟机环境,虚拟机的硬盘文件和配置文件放在朝阳区某托管中心托管的DELL MD3200存储中(注:硬盘600G*4,4T*1).MD3200存储是由4块600G硬盘组成的阵列,用作存储虚拟机的数据文件.单块4T硬盘用作虚拟机数据文件的备份. 故障: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服

JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件

******JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件****** package com.bo.test; import java.io.FileOutputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import

Linux 平台下 误删 oracle 数据文件的恢复方法

1  问题描述 之前写过一篇删除oracle home目录的blog,参考: Linux 平台误删 home oracle 根目录的解决方法 http://blog.csdn.net/tianlesoftware/article/details/43794273 本篇是这边的引深,本来应该是年前整理的,拖到年后了. 模拟现状: 数据库在正常运行,误操作,直接rm 掉了数据文件. 测试环境: [[email protected] trace]$ cat /etc/redhat-release Re

RMAN数据库恢复之丢失数据文件的恢复

删除某一数据文件:SQL> HOST del D:\app\Administrator\oradata\orcl\USERS01.dbf 启动数据库,提示丢失数据文件4,此时数据库处理MOUNT状态: RMAN> STARTUP …… 第 1 行出现错误:ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件ORA-01110: 数据文件 4: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' 执行RMAN恢复======

raid出现故障导致文件丢失如何恢复

RAID磁盘阵列设备,在使用过程中,经常会遇到一些常见故障,这也使得RAID在给我们带来海量存储空间的应用之外,也带来了很多难以估计的数据风险.本文将重点介绍RAID常见故障及raid文件恢复的相关处理方式. RAID的目的就是利用磁盘空间的冗余实现数据容错,不过这是在所有的磁盘或卷没有任何问题的前提下实现的.当RAID卷中的单个磁盘出现故障后,尽管数据可能暂时不会受到威胁,但是磁盘 冗余已经没有了,此时任何不当的操作都可能毁掉已经存放的数据.因此,在充分享受RAID所带来的安全好处时,还应该想

Oracle 只有数据文件的恢复

  数据库版本都为 Oracle10G   在A数据库服务器操作: 将需要转移的数据库A冷备份,冷备份,我很简单. 开始->运行: sqlplus /as sysdba //使用DBA权限登陆到数据库 sqlplus>shutdown immediate //关闭数据库实例 在提示后ORACLE 例程已经关闭后,将对应A数据库中的X:\Oracle\oradata\SourDB数据库目录全部拷贝出来. 我的数据库目录内含REDO01.LOG .REDO02.LOG. REDO03.LOG,SY

物理删除oracle数据文件的恢复

归档模式下测试: 一.open状态下物理删除数据文件,关闭情况恢复: SQL> create tablespace test datafile '+DATA/mecbs/datafile/test01.dbf' size 10M; Tablespace created. SQL> conn scott/scott; Connected. SQL> conn /as sysdba Connected. SQL> create user test identified by test

误删 oracle 数据文件的恢复

虽然一再小心,但是还是发生人为误删除数据库文件.简单步骤,或许关键时刻可以帮大忙.   环境:CENTOS 6.5 模拟误操作: 数据库在正常运行,人工直接rm 掉了数据文件. --1.测试环境情况: $ cat /etc/redhat-release CentOS release 6.5 (Final) select file_name from dba_data_files; /u01/app/oracle/oradata/orcl/test.dbf $ sqlplus / as sysdb