广告
返回顶部
首页 > 资讯 > 数据库 >Undo坏块
  • 505
分享到

Undo坏块

2024-04-02 19:04:59 505人浏览 泡泡鱼
摘要

一、概述 sql> show parameter undo   NAME        

一、概述

sql> show parameter undo

 

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1

 

1.1 当undo_management被设置成MENUAL时使用系统回滚段, 即将undo records 记录到SYSTEM 表空间下的SYSTEM段。

SQL> col segment_name fORMat a25

SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type='ROLLBACK';

 

SEGMENT_NAME              TABLESPACE_NAME                     BYTES NEXT_EXTENT

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

SYSTEM                    SYSTEM                             393216       57344

 

  通过上面的这条语句,我们查到了这个用于rollback 的system segment 存在于system 表空间。 默认情况下,只有一个segment,并且它还比较小,所以,如果使用system 段来存储undo records。肯定会影响数据库的性能。 所以oracle 是建议使用Undo tablespace 来管理undo records。

 

1.2 当undo_management设置成AUTO时使用UNDO tablespace来管理回滚段。 这个时候,我们将有多个undo segment,并且这些segment 是存放在UNDO 表空间里的。 这样对DB的性能就会提高。

 

SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type='TYPE2 UNDO';

 

SEGMENT_NAME              TABLESPACE_NAME                     BYTES NEXT_EXTENT

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

_SYSSMU1_3724004606$      UNDOTBS1                          8519680       65536

_SYSSMU2_2996391332$      UNDOTBS1                          8519680       65536

_SYSSMU3_1723003836$      UNDOTBS1                          2228224       65536

_SYSSMU4_1254879796$      UNDOTBS1                          3276800       65536

_SYSSMU5_898567397$       UNDOTBS1                          8519680       65536

_SYSSMU6_1263032392$      UNDOTBS1                          8519680       65536

_SYSSMU7_2070203016$      UNDOTBS1                          8519680       65536

_SYSSMU8_517538920$       UNDOTBS1                          1179648       65536

_SYSSMU9_1650507775$      UNDOTBS1                          8519680       65536

_SYSSMU10_1197734989$     UNDOTBS1                          8519680       65536

 

10 rows selected.

 

SQL>

通过以上SQL的查询结果,我们可以看出,有10个undo segment来存放undo records。

以上我们是通过dba_segment视图查看的结果。而也可以通过v$rollstat和v$rollname 两个视图来查看信息,这2个视图会显示所有rollback段的信息,包括system段和undo段。

SQL> col name format a25

SQL> select s.usn,n.name,s.extents,s.hwmsize,s.status from v$rollstat s, v$rollname n where s.usn=n.usn;

 

       USN NAME                         EXTENTS    HWMSIZE STATUS

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

         0 SYSTEM                             6     385024 ONLINE

         1 _SYSSMU1_3724004606$               3    8511488 ONLINE

         2 _SYSSMU2_2996391332$               3    8511488 ONLINE

         3 _SYSSMU3_1723003836$               4    2220032 ONLINE

         4 _SYSSMU4_1254879796$               4    3268608 ONLINE

         5 _SYSSMU5_898567397$                3    8511488 ONLINE

         6 _SYSSMU6_1263032392$               3    8511488 ONLINE

         7 _SYSSMU7_2070203016$               3    8511488 ONLINE

         8 _SYSSMU8_517538920$                3    1171456 ONLINE

         9 _SYSSMU9_1650507775$               3    8511488 ONLINE

        10 _SYSSMU10_1197734989$              3    8511488 ONLINE

 

11 rows selected.

 

SQL>

 

二、UNDO 损坏的处理

2.1 方法一,使用system segment

提到了一种方法,就是使用SYSTEM 的回滚段, 步骤如下:

(1)用spfile 创建pfile,然后修改参数:

#*.undo_tablespace='UNDOTBS1'

#*.undo_management='AUTO'

#*.undo_tablespace

#*.undo_retention

undo_management='MANUAL'

rollback_segments='SYSTEM'

(2)用修改之后的pfile,重启DB

SQL> STARTUP MOUNT pfile='F:/initorcl.ora' ;

(3)删除原来的表空间,创建新的UNDO 表空间

SQL> drop tablespace undotbs;

SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;

(4)关闭数据库,修改pfile参数,然后用新的pfile创建spfile,在正常启动数据库。

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'

 

2.2. 方法二:跳过损坏的segment

在方法一中,我们使用了system segment。 通过第一部分我们了解到,undo segment 有多个,我们可以通过alert log 来查看正在使用的是哪些segment,这些段有可能损坏了。 我们只需要把这些损坏的segment 跳过,先正常启动DB,在创建新的UNDO 表空间,在切换一下。

(1)修改pfile,添加参数:

*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'

这些字段的值,我们通过alert log 查看。 也可以通过如下命令查看:

#strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u

(2)用修改之后的pfile启动DB

 因为跳过了哪些损坏的segment,所以DB 可以正常启动。

(3)创建新的UNDO 表空间,并切换过来

SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;

SQL> alter system set undo_tablespace=undotbs1;

SQL> drop tablespace undotbs;

(4)修改pfile,创建spfile,并正常启动

删除如下:

*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'

 

2.3 方法三:使用rman备份恢复

startup mount

 

--检验备份是否有坏块

RMAN> backup validate datafile 22;

 

--查询坏块信息

RMAN> select * from v$database_block_corruption where file#=22;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO     CON_ID

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

        22      32120          1                  0 CORRUPT            1


--修复坏块

RMAN> blockrecover datafile 22 block 32120 from backupset;

 

--打开数据库

alter database open;

 

注:其它文件(system/sysaux/用户数据文件)坏块也可用这种方式修复

 

2.4 方法四:使用参数_offline_rollback_segments和_corrupted_rollback_segments

在没有备份的情况下,

使用_offline_rollback_segments和_corrupted_rollback_segments

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

 alter database datafile '/oracle/app/oracle/oradata/cus/undotbs01.dbf' offline; 

alter database open;

 

2.查询哪些undo段是需要恢复(need recover)

select segment_name,status from dba_rollback_segs where status = 'NEEDS RECOVERY';

 

3. 新建一个回滚表空间,生成pfile

create undo tablespace undotbs2 datafile '/oracle/app/oracle/oradata/cus/undotbs02.dbf' size 300m;

alter system set undo_tablespace='undotbs2';

create pfile='/home/oracle/pfile.txt' from spfile;

 

4.编辑pfile,添加隐含参数

--根据第2步查询需要恢复的undo段

?*._offline_rollback_segments=('_SYSSMU3_1499641855$','_SYSSMU4_3564003469$',......)

*._corrupted_rollback_segments=('_SYSSMU3_1499641855$',_SYSSMU4_3564003469$',......)

 

5.重新启动,删除旧的undo

startup pfile='/home/oracle/ pfile.txt';

drop tablespace undotbs1 including contents and datafiles;

?select segment_name,status from dba_rollback_segs where status = 'NEEDS RECOVERY';


6. 去掉隐含参数,重新启动数据库

  将pfile.txt文件去掉前面两个隐含参数_offline_rollback_segments和_corrupted_rollback_segments,然后重新启动数据库

shutdown immediate;

startup pfile='/home/oracle/pfile.txt';

create spfile from pfile='/home/oracle/pfile.txt';

  shutown immediate;

  startup;

总结

以上就是UNDO 出现故障的几种处理方法,其中方法二和方法四类似,都是采用参数进行恢复。

 

您可能感兴趣的文档:

--结束END--

本文标题: Undo坏块

本文链接: https://www.lsjlt.com/news/46934.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Undo坏块
    一、概述 SQL> show parameter undo   NAME        ...
    99+
    2022-10-18
  • 恢复数据块坏块
    2014.7.22研究恢复数据库坏块:Oracle调用标准C的系统函数,对数据块进行读写操作,因此,坏块是有可能由以下几种原因产生:硬件的I/O错误操作系统的I/O错误或缓冲问题内存或paging问题磁盘修...
    99+
    2022-10-18
  • Oracle坏块处理
    oracle 坏块问题处理 1、说明坏块问题是经常出现在数据库系统中的,如果没有合适的处理方法往往会导致坏块对象不可用或者数据丢失。本文从坏块产生开始说起,着重说明一但坏块产生后不同情况的处理方法。2、坏块...
    99+
    2022-10-18
  • 如何进行BBED标记坏块以及修复坏块
    如何进行BBED标记坏块以及修复坏块,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2022-10-19
  • Oracle数据库UNDO损坏后的恢复是怎样的
    这期内容当中小编将会给大家带来有关Oracle数据库UNDO损坏后的恢复是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。    UND...
    99+
    2022-10-19
  • Linux中如何检测磁盘坏道和坏块
    这篇文章给大家分享的是有关Linux中如何检测磁盘坏道和坏块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。操作步骤如下:在 Linux 上使用坏块工具检查坏道坏块工具可以让用户扫描设备检查坏道或坏块。设备可以是一...
    99+
    2023-06-27
  • 在 Linux 上检测硬盘上的坏道和坏块
    https://linux.cn/article-7961-1.html 让我们从坏道和坏块的定义开始说起,它们是一块磁盘或闪存上不再能够被读写的部分,一般是由于磁盘表面特定的 物理损坏 ...
    99+
    2022-10-18
  • Oracle Rman修复逻辑坏块
    RMAN 实现数据块恢复试用Rman可以实现数据块级的数据恢复,在传统恢复手段中即某个数据文件的一个数据块被损坏,就造成整个数据文件无法试用,此时必须通过备份恢复整个数据文件。显然这样的方法会会时间较长,而...
    99+
    2022-10-18
  • 基于rman的坏块恢复
    转载请注明出处 http://blog.csdn.net/guoyjoe/article/details/30965303  实验步骤如下:1、使用rman备份全库Recovery Ma...
    99+
    2022-10-18
  • Oracle数据库文件坏块损坏的恢复方法
    数据恢复故障描述:打开oracle数据库报错 “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。工程师检测数据库文件发现sysaux01.dbf有坏块,sysaux01.dbf文件损坏...
    99+
    2022-10-18
  • 怎么在Linux上检测硬盘上的坏道和坏块
    本篇内容介绍了“怎么在Linux上检测硬盘上的坏道和坏块”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!让我们从坏道和坏块的定义开始说起,它们...
    99+
    2023-06-16
  • 如何在CentOS下检测硬盘上的坏道和坏块
    这篇文章主要介绍“如何在CentOS下检测硬盘上的坏道和坏块”,在日常操作中,相信很多人在如何在CentOS下检测硬盘上的坏道和坏块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在CentOS下检测硬盘上...
    99+
    2023-06-10
  • Oracle 11g dataguard主库坏块修复
    最理想的情况是开启redo日志实时传输,可利用备库来修复主库的坏块:查看DG模式:alter database recover managed standby&nbs...
    99+
    2022-10-18
  • Oracle 索引出现坏块处理
    SQL> create table test as select * from dba_objects where rownum<1001;Table created.SQL...
    99+
    2022-10-18
  • 检测数据块损坏(Block Corruption)
    数据块的损坏分两种情况,第一种是物理性的,第二种是逻辑性的。物理性一般指数据块头部不可以访问、数据块校验值不合法。逻辑性一般是在物理性结构完整的情况下,数据的内容在含义上不正确,比如保存了不允许的字段值。 ...
    99+
    2022-10-18
  • Oracle 修复坏块,关掉闪回
    RMAN 修复报错:RMAN> recover datafile 2 block 410352;Starting recover at 05-OCT-15using target database c...
    99+
    2022-10-18
  • oracle中ORA-01578和ORA-01110数据文件出现坏块时跳过损坏的块怎么办
    小编给大家分享一下oracle中ORA-01578和ORA-01110数据文件出现坏块时跳过损坏的块怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面...
    99+
    2022-10-18
  • 数据库文件坏块损坏导致打开时报错怎么办
    小编给大家分享一下数据库文件坏块损坏导致打开时报错怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 故障描述故障主要表现为打开数据库时报错,内容为:“sys...
    99+
    2022-10-19
  • 利用dbms_repair来标记和跳过坏块
    SQL> select file_id, block_id, blocks from dba_extents wher&...
    99+
    2022-10-18
  • Oracle中如何使用 DBMS_REPAIR 修复坏块
    这篇文章主要为大家展示了“Oracle中如何使用 DBMS_REPAIR 修复坏块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle中如何使用 DBMS...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作