热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

undo表空间修复小结

首先要知道回滚段在自动管理undo表空间下是不能被offline和删除的,可以先改成manual之后操作,我们知道undo表空间是用来存储数

首先要知道回滚段在自动管理undo表空间下是不能被offline和删除的,可以先改成manual之后操作, 我们知道undo表空间是用来存储数

首先要知道回滚段在自动管理undo表空间下是不能被offline和删除的,可以先改成manual之后操作, 我们知道undo表空间是用来存储数据被改之前的前镜像,那么如果出现问题,可以分两种情况来处理;
第一种情况:如果损坏的回滚段没有正在执行的事务,那问题还相对简单,可以直接删除掉该回滚段即可,并且没有数据丢失。

具体过程:假设文件undotbs01.dbf丢失或者损坏。

1.先把数据文件offline,在mount状态下执行:

SQL>alter database datafile '/software/oradata/JLPROJCT/undotbs01.dbf' offline drop ;

2,打开数据库

SQL>alter database open;

3.我们知道一个数据文件对应n个undo段,所有现在已经有好多undo 段已经 offline了,我们先不对他做任何操作,先查看不是offline的undo段,你会发现他们是不是offline的这些undo段是需要恢复(need recover)

SQL> select status,count(*) from dba_rollback_segs group by status;

STATUS COUNT(*)

---------------- ----------

ONLINE 23

need recovery 5

OFFLINE 143

SQL>select segment_name,status from dba_rollback_segs where status<>'offline'; 就会发现所有用户回滚段是需要恢复的,状态是need recovery.,,这个语句不会显示由于数据文件损坏而出现offline的回滚段。

SEGMENT_NAME STATUS

------------------------------ ----------------

SYSTEM ONLINE ###这是系统回滚段。

_SYSSMU154_3691636531$ need recovery

_SYSSMU155_3686385895$ need recovery

_SYSSMU156_3796802683$ need recovery

_SYSSMU157_2723916652$ need recovery

_SYSSMU158_1435464080$ need recovery

4.新建一个回滚表空间,

SQL>create undo tablespace undo2 datafile '/software/oradata/JLPROJCT/undotbs02.dbf' size 100m ;

tablespace created

5,把回滚段设置成人工管理,然后删除损坏的回滚段。

SQL>alter system set undo_tablespace= 'undo2' scope=spfile; ##指定成新建的undo表空间。

system altered

SQL>alter system set undo_management='manual' scope=spfile;

system altered

6,创建pfile

SQL>create pfile='/Oracle/app/pfile.ora from spfile;

file created

7,一致性关闭数据库,

SQL>shu immediate

8,在pfile 文件中添加一个隐藏参数,把这些回滚段都列在这个参数值里,

*._offline_rollback_segment=('_SYSSMU154_3691636531$','_SYSSMU155_3686385895$','_SYSSMU156_3796802683$','_SYSSMU157_2723916652$','_SYSSMU158_1435464080$')

9,创建成spfile 然后启动数据库。

SQL>create spfile from pfile;

spfile created

SQL>startup

10,这时候回滚段数量并没有发生改变,

SQL>select segment_name,status from dba_rollback_segs where status<>'offline';

SEGMENT_NAME STATUS

------------------------------ ----------------

SYSTEM ONLINE

_SYSSMU154_3691636531$ need recovery

_SYSSMU155_3686385895$ need recovery

_SYSSMU156_3796802683$ need recovery

_SYSSMU157_2723916652$ need recovery

_SYSSMU158_1435464080$ need recovery
11,因为是手工管理,可以直接删除掉那些回滚段。
SQL> drop rollback segment “_SYSSMU154_3691636531$”;

rollback segment droped

.

.

.

.

12,然后删掉原来的undo表空间。

SQL>drop tablespace undo1 including contents;

13,然后重启数据库,

shu immediate

startup

14,注意这时候你的undo 管理还是手工的,所以要把之前的修改改正会自动管理。并且把添加的隐含参数*._offline_rollback_segment删掉。

SQL>alter system set undo_management='auto' scope=spfile;

第二种情况:当损坏的undo 表空间的回滚段上还有活动的事务,这种情况就要强行提交这些事务,就会造成一些数据的丢失。

1,启动数据库到mount状态,只能启动到这里,

2,把有问题的回滚段offline

SQL>alter database datafile '/software/oradata/JLPROJCT/undotbs01.dbf' offline drop ;

3,查看回滚段状态,和第一种情况略有不同,她没有offline的回滚段。

SQL>select usn,xacts from v$rollstat;

SQL> select status,count(*) from dba_rollback_segs group by status;

STATUS COUNT(*)

---------------- ----------

ONLINE 23

need recovery 5

QL>select segment_name,status from dba_rollback_segs where status<>'offline';

SEGMENT_NAME STATUS

------------------------------ ----------------

_SYSSMU154_3691636531$ need recovery

_SYSSMU155_3686385895$ need recovery

_SYSSMU156_3796802683$ need recovery

_SYSSMU157_2723916652$ need recovery

_SYSSMU158_1435464080$ need recovery

4,试图创建发现报错,真正工作中可以从这里来判断到底是那种情况,第一种情况是可以重新建立的。
必须先禁止继续使用旧的回滚段和回滚空间:

SQL>create pfile=/oracle/app/pfile.ora from spfile

file created

SQL>shutdown immediate ;

在pfile中添加并修改以下内容:

*.undo_management='manual' ###手动管理,才可以删除回滚段

推荐阅读
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • 探讨HTML中的DIV样式难题
    本文深入分析了HTML中常见的DIV样式问题,并提供了有效的解决策略。适合所有对Web前端开发感兴趣的读者。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文详细列举了软件开发中常见的功能测试要点,涵盖输入框、搜索、添加/修改、删除、文件上传下载等多个方面,旨在帮助测试人员全面覆盖测试需求,确保软件质量。 ... [详细]
  • 本文介绍了用于监控数据库运行状态的SQL查询,包括重做日志切换频率及PGA和SGA内存使用情况的检查方法。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • 当面临数据库清理任务时,若无删除或重建数据库的权限,可以通过编写SQL脚本来实现批量删除用户自定义的数据表和存储过程。本文将详细介绍如何构造这样的SQL脚本。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • Oracle性能提升:深入探讨SQL优化与类型转换的影响
    本文详细分析了在Oracle数据库中如何通过正确的数据类型匹配来避免不必要的类型转换,从而提高SQL查询效率。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文介绍了Java语言开发的远程教学系统,包括源代码、MySQL数据库配置以及相关文档,适用于计算机专业的毕业设计。系统支持远程调试,采用B/S架构,适合现代教育需求。 ... [详细]
  • MySQL学习指南:从基础到高级
    本文档提供了MySQL的全面学习指南,涵盖从数据库的基本概念到高级特性的详细解析,包括SQL基础命令、数据完整性约束、查询技术、内置函数、存储过程、视图管理、事务处理和索引优化等内容。 ... [详细]
  • 深入理解SQL Server中的聚集与非聚集索引
    本文探讨了SQL Server数据库中两种主要的索引类型——聚集索引和非聚集索引,通过对比分析它们的特点及应用场景,旨在帮助读者更好地理解和利用这两种索引以优化查询性能。 ... [详细]
  • 虽然SQL因其直观易学的语法受到广泛欢迎,但转向Pandas进行数据处理时,初学者可能会感到不适应。本文旨在通过一系列实例,展示如何在Pandas中实现类似SQL的数据查询功能。 ... [详细]
author-avatar
mikewuhan_689
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有