数据库版本:9.2.0.5.0

平台:windows2003

下午接到通知以数据库出现坏块现象,无备份,应用无法正常使用,要予以解决

由于没有备份,无法恢复,只能采用跳过坏块方法,然后通过业务补数据。

首先要通知业务需要停服务,其次用PL/SQL登录把OPTCABLE表的sql导出来。

首先要查出坏块中的对象是什么   file_id为截图中文件号,326677为数据库的块号。

SQL> SELECT tablespace_name,segment_type, owner, segment_name FROM dba_extents WHERE file_id =82 AND 326677between block_id AND block_id + blocks - 1;

TABLESPACE_NAME    SEGME   OWNER  SEGMENT_NAME

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

USERS               TABLE    GISTAR    OPTCABLE

然后需要查询数据对象的id(用于查询rowid的参数)

SQL> SELECT data_object_id FROMdba_objects WHERE object_name = 'OPTCABLE' and owner='GISTAR';

DATA_OBJECT_ID

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

97248

找出坏块最小的rowid  (1, DATA_OBJECT_ID ,file_id,数据库的块号,0)

SQL> select dbms_rowid.rowid_create(1,97248,82,326677,0) from dual;

DBMS_ROWID.ROWID_C

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

AAAXvgABSAABPwVAAA

找出坏块最大的rowid  (1, DATA_OBJECT_ID ,file_id,数据库的块号+1,0)

SQL> select dbms_rowid.rowid_create(1,97248,82,326678,0) from dual;

DBMS_ROWID.ROWID_C

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

AAAXvgABSAABPwWAAA

然后通过rowid来确定坏块数据的范围,以便排除

这里要注意,rowid的取值一定要大于大的,小于小的(上步骤查询出来的2个rowid)

SQL> SELECT /*+ ROWID(A) */ COUNT(*)FROM OPTCABLE A WHERE ROWID>='AAAXvgABSAABPwWAAA';

当进行查询时又报出undo表空间也有坏块

ERROR 位于第 1 行:

ORA-01578: ORACLE 数据块损坏(文件号107,块号225)

ORA-01110: 数据文件 107:'D:\ORACLE\ORADATA\LNXC\UNDOTBS07.DBF'

解决此问题要替换undo表空间(注意未结束的回滚段)

create undo tablespace undo2 datafile'd:\oracle\oradata\lnxc\undo02_01.dbf' size 2048M;

alter system set undo_tablespace=undo2;

重启数据库后查询undo信息(undo已经更换)

SQL> show parameter undo;

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     10800

undo_suppress_errors                 boolean     FALSE

undo_tablespace                      string      UNDO2

删除老undo表空间报错,发现了未结束的回滚段

SQL> drop tablespace UNDOTBS1 includingcontents and datafiles;

drop tablespace UNDOTBS1 including contentsand datafiles

*

ERROR 位于第 1 行:

ORA-01548: 已找到活动回退段'_SYSSMU5$',终止删除表空间

创建pfile

SQL> create pfile='d:\t.txt' fromspfile;

关闭实例

SQL> shutdown immediate

编辑pfile加入如下参数(注意,CORRUPTED_ROLLBACK_SEGMENTS中一定要包含未结束的回滚段)

*.undo_management='MANUAL'

*._CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

用pfile启动数据库

SQL> startup pfile='d:\t.txt';

删除原来的undo表空间(数据文件也删除)

SQL> drop tablespace UNDOTBS1 includingcontents and datafiles;

再用spfile重启数据库,因为我们要用undo2表空间进行修复(不用指定参数文件,默认)

startup

查询undo段信息

SQL> selectsegment_name,status,tablespace_name from dba_rollback_segs;

SEGMENT_NAME         STATUS           TABLESPACE_NAME

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

SYSTEM               ONLINE           SYSTEM

_SYSSMU17$           ONLINE           UNDO2

_SYSSMU18$           ONLINE           UNDO2

_SYSSMU19$           ONLINE           UNDO2

_SYSSMU20$           ONLINE           UNDO2

_SYSSMU21$           ONLINE           UNDO2

_SYSSMU22$           ONLINE           UNDO2

_SYSSMU23$           ONLINE           UNDO2

_SYSSMU24$           ONLINE           UNDO2

_SYSSMU25$           ONLINE           UNDO2

_SYSSMU26$           ONLINE           UNDO2

发现没有问题,切换生产用户,继续修复坏块

然后通过rowid来确定坏块数据的范围,以便排除

这里要注意,rowid的取值一定要大于大的,小于小的(上步骤查询出来的2个rowid)

SQL> SELECT /*+ ROWID(A) */ COUNT(*)FROM OPTCABLE A WHERE ROWID>='AAAXvgABSAABPwWAAA';

COUNT(*)

----------

151362

SQL> SELECT /*+ ROWID(A) */ COUNT(*)FROM OPTCABLE A WHERE  ROWID

COUNT(*)

----------

27699

以原表结构创建一个新表,用来存放该表完好的数据(rowid依然大于大的小于小的)

SQL> CREATE TABLE OPTCABLE_BAK AS SELECT/*+ ROWID(A) */ * FROM OPTCABLE A WHERE ROWID>='AAAXvgABSAABPwWAAA';

SQL> INSERT INTO  OPTCABLE_BAK SELECT /*+ ROWID(A) */ * FROMOPTCABLE A WHERE ROWID

SQL> commit;

现在就把完好的数据成功找回,这里注意不要用rename的方式去修改表名让业务使用,因为新创建表字段的默认值已经丢失,还需要重新加默认值。

按照一开始用PL/SQL导出的表sql去重新创建表结构,非表对象等等。

然后重新插入数据

SQL> insert into optcable select * fromoptcable_bak;

SQL> commit;

删除创建的临时表(9i或9i以上没有开回收站的数据库不用加purge,其他建议加purge)

SQL> drop table optcable_bak;

SQL> drop table optcable_bak1;

到此坏块问题解决,如果11G版本还有统计信息的,建议追加统计信息。

oracle exp调过坏块,无备份坏块处理(跳过方式)相关推荐

  1. 微软块级备份引擎服务器,文件级与块级备份区别

    首先我们先来了解一下,什么叫做块级?什么叫文件级? 1.块级概念: 块级是指以扇区为基础,一个或我连续的扇区组成一个块,也叫物理块.它是在文件系统与块设备(例如:磁盘驱动器)之间. 2.文件级概念: ...

  2. Oracle exp/imp,备份或导入时注意的事项

    Oracle exp/imp,备份或导入时注意的事项: 本篇主要讲述的是Oracle exp/imp备份导入的实际操作中需要注意的事项的介绍,凡事都不是完美的.不论哪种计算机语言,不论它的实际操作技巧 ...

  3. Oracle 无备份情况恢复ocr和olr

    Oracle 无备份情况恢复ocr和olr Oracle 11.2 GI中OLR损坏的修复方法 一.先关闭GI,命令不再贴出来了,参见: http://blog.csdn.net/msdnchina/ ...

  4. Oracle 无备份情况下的恢复--控制文件/数据文件

    13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...

  5. Oracle exp/imp导出导入命令及数据库备份

    Oracle exp/imp导出导入命令及数据库备份 Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令 ...

  6. oracle如何exp远程备份,oracle exp远程数据库

    通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库) 通过exp命令可以对Oracle数据库进行备份操作,其命令含义是:exp 用户名/密码@数据库所在ip ...

  7. ORACLE基础学习-RMAN应用之(归档模式无备份,丢失数据文件的恢复)

    二.归档模式无备份,丢失数据文件的恢复: 首先要意识到,这种恢复是有条件的,只有在某些特定条件下,才有可能在没有备份的情况下恢复丢失的数据文件. 同时又需意识到不是所有丢失的文件都是可以被成功恢复的. ...

  8. Oracle性能调优之--Buffer cache 的调整与优化

    Oracle性能调优之--Buffer cache 的调整与优化 Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候, ...

  9. 偷梁换柱 | 无备份情况下的数据恢复实践(二)

    黄玮(Fuyuncat) ♥       资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 个人网站 www.HelloDBA.com 在 数据恢复实践(一)中, ...

最新文章

  1. 第十、十一周项目五 - 摩托车继承自行车和机动车
  2. 2.privite私有变量的意义
  3. 法国 计算机 转专业,在法国留学怎样换专业
  4. Android定制实现上网限制
  5. 快乐、聪明和有用,你会如何选择?
  6. 强烈推荐这 15 个网站!
  7. Openstack 简单梳理,(自用 慎点)
  8. Selenium 打开新标签页获取元素
  9. pptpd mysql_pptpd+freeradius+mysql安装步骤
  10. 重磅!大数据《实战全栈工程师成长手册》,附 PDF PPT 下载
  11. Linux中的文本流
  12. libmysqlclient_18 not defined in file libmysqlclient.so.18
  13. 最简单的方法!UEFI引导+GPT分区安装win10+Ubuntu16.04双系统
  14. Unity ASE制作彩色流光马赛克 像素风 舞池DJ台效果Shader
  15. 教你一招APP如何快速定制马甲包
  16. Yeslab安全实验室教徒计划第二期 2011-11-7
  17. java 使用GeoTools工具 geojson 与shp 相互转换
  18. C4D中无法连接对象+删除?
  19. FileUpload的使用
  20. 【Adobe Acrobat】裁剪PDF文件中的一小部分并保存成单独页

热门文章

  1. Java讲课笔记30:事件处理机制
  2. VB讲课笔记09:过程
  3. 【英语学习】【Level 08】U03 My Choice L6 Stories that make an impact
  4. 【英语学习】【English L06】U03 House L6 Sharing an apartment
  5. 【英语学习】【WOTD】rowel 释义/词源/示例
  6. 【英语学习】【WOTD】nomothetic 释义/词源/示例
  7. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(3) - 8086/16位指令前缀
  8. C++实现贪吃蛇(多线程,窗口设置,链表,音乐播放)
  9. Unity中的layer和tag
  10. python库的安装方法_Python库的安装方法