Oracle数据库不同损坏级别的恢复教程

前言

在 DBA 的日常工作中不可避免存在着数据库的损坏,本文将主要介绍 Oracle 数据库遇到不同损坏级别下的应该采用的恢复方法,供读者在遇到此类情景时,能的找到适合自己的恢复方法,提高工作效率。

数据块损坏的恢复

当数据文件中仅有少量的数据块发生了介质损坏时,我们可以利用RMAN对其进行数据块一级的恢复。数据块级的局部恢复可以大大缩短恢复时间,甚至缩短到其他恢复方式的千分之几。此外,在数据块存在损坏而进行的恢复中,系统可以处于运行状态,这个数据文件也可以处于联机应用状态,无须将其设置为脱机,保持应用运行状态。

1)连接RMAN环境,并以 SYSDBA(SYSOPER) 身份连接数据库:

$rman target /

2)执行下面的数据块修复命令进行数据块的修复:

rman>blockrecover datafile 3 block 2,150,152;

现在数据块得以恢复,系统继续运行。

数据文件损坏的恢复

第一步:设置损坏的数据文件脱机

SQL>alter database datafile 4 offline;

第二步:由RMAN装载数据文件

RMAN>restore datafile 4;

第三步:对损坏的数据文件进行恢复

RMAN>recover datafile 4;

第四步:设置已恢复数据文件联机

RMAN>sql “alter database datafile 4 online”;

第五步:查看数据文件的可用性

SQL>select name,enabled,status from v$datafile;

至此,一个非系统表空间的数据文件恢复过程完成。

表空间损坏的恢复

当然数据库恢复方法不仅一个,管理员也可以按照表空间恢复的方法进行恢复操作。还是上面的案例,如果发生了失败,现在按照表空间损坏情况下的恢复方法进行恢复。

下面用备份来恢复表空间users中的全部数据文件:

第一步:将表空间脱机

SQL> alter tablespace users offline;

第二步:装载表空间

RMAN>restore tablespace users;

第三步:恢复表空间

RMAN>recover tablespace users;

第四步:将表空间联机

RMAN>sql “alter tablespace users online”;

第五步:查看数据文件的可用性

SQL>select name,enabled,status from v$datafile;

系统表空间的恢复

如果是还原表空间或者系统表空间损坏,则数据库系统不能运行,数据库一定不能处于打开状态,在RMAN环境下连接Oracle,注意,此时的连接并不是连接到已经打开的数据库,而是连接到处于装载状态下的数据库:

第一步:连接RMAN

$rman target /

第二步:装载表空间

RMAN>restore tablespace system;

第三步:恢复表空间

RMAN>recover tablespace system;

第四步:打开数据库

SQL>alter database open;

数据库的崩溃恢复

一种全数据库恢复方法,用于数据库彻底崩溃,不可以进行数据库局部恢复操作的情况。这种方法很简单---装载回数据库的一个完整备份集进行恢复操作。虽然方法是简单的,但代价是庞大的----时间可能会很长! 首先需要启动数据库实例。在控制文件完好的情况下,启动到mount状态是没有问题的,如果控制文件损坏,则只能启动到nomount状态。在本例中,数据库可以启动到mount状态:

第一步:启动实例

SQL>startup mount

第二步:进入到RMAN环境下:

$rman target /

第三步:装载数据库备份

RMAN>restore database;

第四步:执行下面的命令进行数据库的完全恢复:

RMAN>recover database;

第五步:打开数据库

RMAN>alter database open;

控制文件损坏的恢复

由于某种原因,例如介质损坏导致所有控制文件都不可用时,管理员可以使用RMAN的控制文件自动备份,对控制文件进行恢复。

为了描述的方便,这里我们假设在一套归档方式运行的数据库中,所有控制文件由于介质损坏导致不可用。其他数据库文件,包括数据文件、参数文件(SPFILE)、归档日志文件、联机重做日志文件等均完好无损。 我们可以按照下面的步骤进行恢复。由于数据库控制文件损坏,因此数据库这时只能处于脱机状态。

第一步:启动数据库到nomount状态:

SQL>startup nomount

第二步:在RMAN环境中,注册数据库ID(DBID)

$rman target /
rman>set DBID=1195474494

第三步:从数据库备份集中装载控制文件备份

RMAN>restore controlfile from autobackup

第四步:将数据库开启到mount状态:

RMAN>alter database mount

第五步:用RMAN备份恢复数据库

RMAN>recover database;

第六步:将数据库实例打开,但需要进行日志的重置(resetlogs):

RMAN>alter database open resetlogs;

由于数据库以resetlogs方式打开,虽然本系统数据并未丢失,但由于所有日志文件已被重置,因此,需要进行完全数据库备份。 如果控制文件损坏,且伴着其他数据文件等的损坏,则按照本节介绍的控制文件恢复,加上数据库的崩溃恢复,可以实现数据库的完全恢复(或不完全恢复)。

日志文件损坏的恢复

由于数据库日志可以采用多成员机制,这种方式保证在单个日志文件损坏下的系统连续运行。即便一个日志组的所有成员都已经损坏,如果是当前日志组,则数据丢失、数据库执行不完全恢复是必然的选择。如果不是当前日志组,可能根本无须修复,直接将日志组删除,再创建新的日志组就可以了。

第一步:进行数据库的不完全恢复

SQL>recover database until cancel;

第二步:按照重置日志的方式打开数据库

SQL>alter database open resetlogs;

数据库得到不完全恢复。当然,上述过程也可以在RMAN中完成。

从指定备份集中恢复

RMAN>
run{
set until scn=1645604; --执行不完全恢复
restore database from tag='TAG20110702T231137'; --指定备份集的tag值,在list backup of database中可以查到
recover database;
sql 'alter database open resetlogs';
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • [Oracle] 解析在没有备份的情况下undo损坏怎么办

    如果Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,不过如果没有备份,可以采用一种非常规的手段(利用Oracle的隐藏参数),如果此时undo包含未提交的事务,会造成一点点的数据丢失(一般都是可忍受的),如果没有未提交的事务,则不会有数据丢失.其主要步骤有: 1. 修改undo表空间管理为手动:2. 设置隐藏参数(_offline_rollback_segments或_corrupted_rollback_segments)标识受影响的回滚段,使Oracle忽略其上的未提交

  • oracle冷备份恢复和oracle异机恢复使用方法

    一.冷备份1. 冷备份发生在数据库已经正常关闭的情况下,在进行冷备份之前通常要知道需要进行备份文件的名称以及路径 复制代码 代码如下: SQL>select name from v$datefile;SQL>select name from v$controlfile;SQL>select member from v$logfile; 2.冷备份所需备份的文件包括以下几种:所有数据文件.所有控制文件.所有联机REDO LOG 文件3.冷备份的步骤①正常关闭要备份的实例(instance)

  • ORACLE 数据库RMAN备份恢复

    机器A: select instance_name from v$instance; select name from v$database; select name from v$datafile; 查询日志模式: archive log list; shutdown immediate; startup mount; 把日志改为归档模式: alter database archivelog; alter database open; alter system archive log curr

  • ORACLE检查找出损坏索引(Corrupt Indexes)的方法详解

    索引 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是一个独立于表的对象,可以存放在与表不同的表空间中.索引记录中存有索引关键字和指向表中数据的指针(地址).对索引进行的I/O操作比对表进行操作要少很多.索引一旦被建立就将被Oracle系统自动维护,查询语句中不用指定使用哪个索引. 从物理上说,索引通常可以分为:分区和非分区索引.常规B树索引.位图(bitmap)索引.翻

  • Oracle数据库数据丢失恢复的几种方法总结

    根据oracle数据库的特点和提供的工具,主要方法有以下几种方法: 利用逻辑备份使用import工具丢失数据的表 利用物理备份来通过还原数据文件并进行不完全恢复 利用dbms_logmnr包从redo log文件中恢复 利用flashback特性恢复数据 前提 为了方便使用方法的介绍,上述恢复方法都将基于以下场景进行:系统管理员在前一天晚上11点用export对数据库做了全库逻辑备份,然后对所有数据文件进行了热备份.第二天上午10点,系统管理员在修改表TFUNDASSET的数据时,由于修改语句的

  • Oracle误删除表数据后的数据恢复详解

    Oracle误删除表数据后的恢复详解   测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_retention参数的查询与修改 使用show parameter undo命令查看当前的数据库参数undo_retention设置. 显示如下: SQL> show parameter undo NAME                                 TYPE        VAL

  • Oracle数据块损坏之10231内部事件不完全恢复

    什么是块损坏: 所谓损坏的数据块,是指块没有采用可识别的 Oracle 格式,或者其内容在内部不一致.通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏".如果是逻辑损坏,则是 Oracle 内部错误.Oracle 数据库检测到不一致之后,就将逻辑损坏的块标记为损坏.如果是介质损坏,则是块格式不正确:从磁盘读取的块不包含有意义的信息.实验:某个分区数据块损坏,不完全恢复此分区表数据.  背景:数据库没有有效

  • oracle drop table(表)数据恢复方法

    复制代码 代码如下: --查看数据库回收站 select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin; --恢复  FLASHBACK TABLE 表名 TO BEFORE DROP; 此举 可以恢复表结构,同时 数据也恢复了 必须9i或10g以上版本支持,flashback无法恢复全文索引

  • oracle如何恢复被覆盖的存储过程

    如果你不小心覆盖了之前的存储过程,那得赶紧闪回,时长越长闪回的可能性越小.原理很简单,存储过程的定义就是数据字典,修改数据字典跟修改普通表的数据没有区别,此时会把修改前的内容放到undo中,我们可以根据这一点来进行闪回,所以我说要尽快,要不然找不回来了.下面我们来做一个实验: 1.在用户TEST下14:31下建立存储过程 复制代码 代码如下: create or replace procedure GG_TEST as l_cnt number; begin for i in 1 .. 1000

  • Oracle数据库不同损坏级别的恢复教程

    前言 在 DBA 的日常工作中不可避免存在着数据库的损坏,本文将主要介绍 Oracle 数据库遇到不同损坏级别下的应该采用的恢复方法,供读者在遇到此类情景时,能的找到适合自己的恢复方法,提高工作效率. 数据块损坏的恢复 当数据文件中仅有少量的数据块发生了介质损坏时,我们可以利用RMAN对其进行数据块一级的恢复.数据块级的局部恢复可以大大缩短恢复时间,甚至缩短到其他恢复方式的千分之几.此外,在数据块存在损坏而进行的恢复中,系统可以处于运行状态,这个数据文件也可以处于联机应用状态,无须将其设置为脱机

  • Oracle数据库及图形化界面安装教程图解

    首先在电脑D盘(或者其他不是C盘的磁盘,一般软件不会安装到C盘,否则会拖慢电脑的运行速度,造成电脑卡顿)新建文件夹并命名,这里命名oracle;按住Ctrl键,鼠标同时选中win64_11gR2_database_1of2.zip和win64_11gR2_database_2of2.zip两个压缩包,右键解压到oracle文件夹,将得到database文件,如图1: 图1 双击打开database文件夹如图2,双击setup.exe应用文件进行安装. 图2 安装步骤如下:. (1)选择"下一步&

  • MSSQL与Oracle数据库事务隔离级别与锁机制对比

    一,事务的4个基本特征 Atomic(原子性): 事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要 么全部成功,要么全部失败. Consistency(一致性): 只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初 状态. Isolation(隔离性): 事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正 确性和完整性.同时,并行事务的修改必须与其他并行事务的修改 相互独立. Durability(持久性): 事务结束后,事务处理的结果必须能够得到固化. 以上属于废话

  • ORACLE数据库事务隔离级别介绍

    两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题: 1.幻想读:事务T1读取一条指定where条件的语句,返回结果集.此时事务T2插入一行新记录,恰好满足T1的where条件.然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想. 2.不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读. 3.脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据

  • Oracle数据库的备份及恢复策略研究

    正在看的ORACLE教程是:Oracle数据库的备份及恢复策略研究. 摘 要 恢复丢失的数据库文件在很大程度上取决于所采用的备份策略.本文从恢复的灵活性出发,对Oracle8数据库的备份及恢复策略进行了探讨,并给出了Windows 2000环境下使备份过程自动化的脚本文件的项目开发实例. 关键词 Oracle 数据库 备份 恢复 引言 随着信息系统在各种商务活动中重要性的不断增强,维护系统数据的可用性已成为当前一个十分重要的课题.为了有效地保持健康的信息系统,必须采取一定的措施防止在由介质.操作

  • DBF 文件恢复 ORACLE 数据库的方法

    清·魏源<庸易通义>:"至道问学之有知无行,分温故为存心,知新为致知,而敦厚为存心,崇礼为致知,此皆百密一疏." 起因 在我们的生产活动中,意外总是在不经意间发生.那天一个安装有 oracle 数据库的盘符不小心被格式化了,好几个项目都炸了.不过还好有备份,不过只有 .DBF 文件和几个日志文件: //数据库系统相关 REDO01.LOG REDO02.LOG REDO03.LOG SYSTEM01.DBF UNDOTBS01.DBF SYSAUX01.DBF USERS0

  • 连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程

    在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图: 发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动oracle的监听. 1.在安装Oracle服务器的主机上,打开Net Configuration Assistant 2.选择监听程序配置,下一步 3.选择重新配置,下一步 4.选择监听程序,默认,下一步 注:如果你的监听已启动,则出现提示框,选择是 5.选择协议,使用默认的T

  • PL/SQL远程备份和恢复Oracle数据库

    在客户端远程备份的文件保存在数据库所在主机上,不会直接拷贝到客户端. ------------------------------------------ 首先无论你的Oracle服务器是Linux还是windows操作系统,Oracle的备份和恢复操作都是使用DBMS_DUMP来实现导入(备份)和导出(恢复).首先你要安装好PL/SQL,用PL/SQL来执行我下面提供的JOB就可以实现了.  一.Oracle的导出(备份) 1.用PLSQL连接Oracle数据库服务器,使用你需要导出的用户连接

随机推荐