ORA-01578: ORACLE 数据块损坏

2023-11-09

 

time: 2008-6-12 18:35
author : skate
 
os: winxp
db: 10g r2
 
错误提示:
 
ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 20)
ORA-01110: 数据文件 6: 'F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/BLOCK.DBF'
 
 
数据块的损坏与恢复
数据库的恢复有时是件很复杂的事情,轻率的操作和尝试可能导致数据库的永久损坏
 
所以在操作前 一定要做好备份,对于重要的数据,如果自己不能确定恢复步骤
 
和后果的话,可以先向专业人士咨询,以免造成损失
 
 
这里是做模拟数据块的损坏和恢复
 
 
 
1.插入数据
 
C:/Documents and Settings/Administrator>sqlplus / as sysdba
 
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 12 17:38:46 2008
 
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 
 
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
 
SQL> select name from v$datafile;
 
NAME
------------------------------------------------------------------------------
 
F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/SYSTEM01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/UNDOTBS04.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/SYSAUX01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/USERS01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/EXAMPLE01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/BLOCK.DBF
 
已选择6行。
 
SQL> drop tablespace block including contents and datafiles;
 
表空间已删除。
 
SQL> create tablespace block
 2 datafile 'F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/block.dbf' size 1m
 3 extent management local;
 
表空间已创建。
 
 
 
SQL> alter user skate default tablespace block;
 
用户已更改。
 
SQL> alter user skate quota unlimited on block;
 
用户已更改。
 
SQL> conn skate/skate
已连接。
SQL> create table t as select * from dba_users;
 
表已创建。
 
SQL> insert into t select * from t;
 
已创建28行。
 
SQL> insert into t select * from t;
 
已创建56行。
 
SQL> insert into t select * from t;
 
已创建112行。
 
SQL> insert into t select * from t;
 
已创建224行。
 
SQL> insert into t select * from t;
 
已创建448行。
 
SQL> insert into t select * from t;
 
已创建896行。
 
SQL> insert into t select * from t;
 
已创建1792行。
 
SQL> insert into t select * from t;
 
已创建3584行。
 
SQL> insert into t select * from t;
insert into t select * from t
*
第 1 行出现错误:
ORA-01653: 表 SKATE.T 无法通过 8 (在表空间 BLOCK 中) 扩展
 
SQL> commit;
 
提交完成。
 
SQL> alter system checkpoint;
 
系统已更改。
 
SQL> select count(*) from t;
 
 COUNT(*)
----------
      7168
 
SQL>
 
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
 
 
2.模拟损坏数据文件
 
关闭数据库后用Ultredit编辑数据文件,随便更改几个字符.然后启动数据库
 
 
SQL> startup
ORACLE 例程已经启动。
 
Total System Global Area 574619648 bytes
Fixed Size                   1250212 bytes
Variable Size              180358236 bytes
Database Buffers           385875968 bytes
Redo Buffers                 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> select count(*) from t;
select count(*) from t
                     *
第 1 行出现错误:
ORA-00942: 表或视图不存在
 
 
SQL> select count(*) from skate.t;
select count(*) from skate.t
                           *
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 20)
ORA-01110: 数据文件 6: 'F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/BLOCK.DBF'
 
 
SQL>
 
 
注意:因为数据块损坏,所以查询该表,将会提示错误
 
 
3. 使用DBV检查数据文件
 
 
 
C:/Documents and Settings/Administrator>dbv file=F:/oracle/product/10.2.0/oradat
a/movo/BLOCK.DBF blocksize=8192
 
DBVERIFY: Release 10.2.0.1.0 - Production on 星期四 6月 12 18:12:35 2008
 
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 
DBVERIFY - 开始验证: FILE = F:/oracle/product/10.2.0/oradata/movo/BLOCK.DBF
页 20 标记为损坏
Corrupt block relative dba: 0x01800014 (file 6, block 20)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x01800014
 last change scn: 0x0000.0015e13c seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0xe13c0601
 check value in block header: 0xf7d7
 computed block checksum: 0x7772
 
 
 
DBVERIFY - 验证完成
 
检查的页总数: 128
处理的页总数 (数据): 109
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其它): 18
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 0
标记为损坏的总页数: 1
流入的页总数: 0
最高块 SCN             : 1433924 (0.1433924)
 
C:/Documents and Settings/Administrator>
 
 
 
dbv检测到坏块.
 
 
4.寻求恢复
 
在这种情况下,如果有备份,需要从备份中恢复
如果没有备份,那么坏块部分的数据肯定要丢失了
 
 
在这个时候导出是不允许的:
 
 
C:/Documents and Settings/Administrator>exp skate/skate@movo file=t.dmp tables=t
 
 
Export: Release 10.2.0.1.0 - Production on 星期四 6月 12 18:14:54 2008
 
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 
 
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
 
即将导出指定的表通过常规路径...
. . 正在导出表                                T
EXP-00056: 遇到 ORACLE 错误 1578
ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 20)
ORA-01110: 数据文件 6: 'F:/ORACLE/PRODUCT/10.2.0/ORADATA/MOVO/BLOCK.DBF'
导出成功终止, 但出现警告。
 
C:/Documents and Settings/Administrator>
 
 
 
5.恢复步骤
 
当然,对于不同的情况需要区别对待
 
首先你需要检查损坏的对象,使用以下SQL:
 
 
 
SQL> select tablespace_name,segment_type,owner,segment_name from dba_extents
 2 where file_id=6 and 20 between block_id and block_id+blocks-1
 3 ;
 
TABLESPACE_NAME                 SEGMENT_TYPE       OWNER
------------------------------ ------------------ ------------------------------
 
SEGMENT_NAME
--------------------------------------------------------------------------------
 
BLOCK                           TABLE              SKATE
T
 
 
SQL>
 
 
如果损失的是数据,ok
我们可以设置内部事件,使exp跳过这些损坏的block
 
 
 
SQL> alter system set events='10231 trace name context forever,level 10';   
 
系统已更改。
 
SQL>
 
注意: 10231 内部事件,设置在全表扫描时跳过损坏的数据块.
 
 
 
然后我们可以导出未损坏的数据:
 
 
C:/Documents and Settings/Administrator>exp skate/skate@movo file=t.dmp tables=t
 
 
Export: Release 10.2.0.1.0 - Production on 星期四 6月 12 18:22:49 2008
 
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 
 
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
 
即将导出指定的表通过常规路径...
. . 正在导出表                                T导出了         7102 行
成功终止导出, 没有出现警告。
 
C:/Documents and Settings/Administrator>
 
 
 
 
这时候数据成功导出.这是我可以drop table,然后recreate这个表,最后在imp数据
 
删除表T:
 
SQL> drop table t;
drop table t
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在
 
 
SQL> drop table skate.t;
 
表已删除。
 
SQL> commit;
 
提交完成。
 
SQL>
 
 
导入数据
 
C:/Documents and Settings/Administrator>imp skate/skate@movo file=t.dmp tables=t
 
 
Import: Release 10.2.0.1.0 - Production on 星期四 6月 12 18:29:36 2008
 
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 
 
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
 
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SKATE 的对象导入到 SKATE
. 正在将 SKATE 的对象导入到 SKATE
. . 正在导入表                              "T"导入了         7102 行
成功终止导入, 没有出现警告。
 
C:/Documents and Settings/Administrator>
 
 
SQL> select count(*) from skate.t;
 
 COUNT(*)
----------
      7102
 
SQL>
 
现在这个表可以访问了
 
 
在这个例子中我们损失数据为:
 
 7168-7102=66
数据块损坏前:
 
SQL> select count(*) from t;
 
 COUNT(*)
----------
      7168
 
数据块损坏后:
 
SQL> select count(*) from t;
 
 COUNT(*)
----------
      7102
 
 
 
---end----
 
 
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORA-01578: ORACLE 数据块损坏 的相关文章

随机推荐

  • ESP8266之AT指令

    一 8266作为client 1 AT 功能 测试8266能否工作 2 AT CWMODE 3 功能 设置工作模式 1 station模式 2 ap模式 3 ap station复位保存当前值 3 AT RST 功能 复位 4 AT CWL
  • Android利用AIDL实现apk之间跨进程通信

    AIDL 最广泛与最简单的应用是与四大组件之一 Serivce 的配合使用了 我们都知道 启动一个 Serivce 有两种方式 1 通过 startService 的方式 2 通过 bindService 的方式 通过 binService
  • 图像处理之目标检测入门总结

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文转自 机器学习算法那些事 本文首先介绍目标检测的任务 然后介绍主流的目标检测算法或框架 重点为Faster R CNN SSD YOLO三个检测框架 本文内容主要整理
  • linux安装自动化部署工具jenkins

    创建工程目录 mkdir home software jenkins 创建工作空间 mkdir home workspaces jenkins 进入工程目录 cd home software jenkins 下载Jenkins rpm安装包
  • 伪代码及其实例讲解

    伪代码 Pseudocode 是一种算法描述语言 使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言 Pascal C Java etc 实现 因此 伪代码必须结构清晰 代码简单 可读性好 并且类似自然语言 介于自然语言与编程
  • 基于svg.js实现对图形的拖拽、选择和编辑操作

    本文主要记录如何使用 svg js 实现对图形的拖拽 选择 图像渲染及各类形状的绘制操作 1 关于SVG SVG 是可缩放的矢量图形 使用XML格式定义图像 可以生成对应的DOM节点 便于对单个图形进行交互操作 比CANVAS更加灵活一点
  • 分享一下Python数据分析常用的8款工具

    Python是数据处理常用工具 可以处理数量级从几K至几T不等的数据 具有较高的开发效率和可维护性 还具有较强的通用性和跨平台性 Python可用于数据分析 但其单纯依赖Python本身自带的库进行数据分析还是具有一定的局限性的 需要安装第
  • 移动端开发技术小结(前端)

    移动端开发技术小结 前端 移动端处理webkit内核即可 浏览器的私有前缀只需要考虑添加 webkit 布局视口 视觉视口 理想视口 将布局宽度改为视觉视口 图片 2倍图 3倍图 背景缩放 background size 背景图片宽度 背景
  • windows 系统安装sonarqube

    SonarQube是一种自动代码审查工具 用于检测代码中的错误 漏洞和代码异味 它可以与您现有的工作流程集成 以便在项目分支和拉取请求之间进行连续的代码检查 官方网站 https www sonarqube org 1 使用前提条件 运行S
  • FTP-读取指定目录下的文件,上传到FTP服务器,一键复制黏贴,就是这么丝滑~

    背景 需要定时将服务器下的日志文件上传到指定FTP服务器的目录下 并通知第三方平台文件已上传 FTP服务器模拟工具 application yml配置 spring logfilepath home jboss server default
  • Cesium Terrain Builder (CTB) 简单使用_地形切片

    Cesium Terrain Builder CTB 简单使用 地形切片 目录 Cesium Terrain Builder CTB 简单使用 地形切片 官网地址 win r cmd 打开命令提示符工具运行 Create a GDAL Vi
  • windows计算机无法打开,为什么我的电脑无法运行Win11?原因可能是这个

    原标题 为什么我的电脑无法运行Win11 原因可能是这个 为什么我的电脑无法运行Win11 原因可能是这个 微软已经在日前正式发布Windows 11操作系统 虽然新系统的更新升级与发布并非同步进行 甚至现在连官方都未公开预览版 但由于此前
  • eccms静态页面出现出现基础链接已关闭,无法链接到远程服务器错误的解决办法

    出现 基础链接已关闭 无法链接到远程服务器 错误 一 系统组件错误 如果属于系统Socket组件错误 可以重启socket组件 netsh winsock reset 进行解决 二 实际发生的原因 由于实际情况所需 禁止服务器访问外网 解决
  • 【C++笔记】《C++编程思想-卷一》笔记

    C 编程思想 笔记 Volume 1 第一章 对象导言 OOP ObjectOriented Programming 面对对象编程 UML Unified Model Language 统一建模语言 堆 stack 和栈 heap 预备知识
  • dgl 操作

    dgl图的基本操作 dgl简单使用 udf函数怎么写 通过edges 打得到两端的列表 将所有nodes换成edges 截错图了 通过nodes则不是很好使 返回很多的tensor原因是这个函数运行好几遍
  • Seq2Seq模型学习(pytorch)

    在看pytorch的官方英文例子 做些笔记 如有纰漏请指正 原文 https pytorch org tutorials beginner chatbot tutorial html 数据准备 首先是单词编码 seq2seq的单词编码的方式
  • 02-线性结构3 Reversing Linked List(PTA)

    02 线性结构3 Reversing Linked List 25 point s Given a constant K and a singly linked list L you are supposed to reverse the
  • MacOS 安装、卸载Homebrew

    MacOS 安装 卸载Homebrew 1 Homebrew官网地址 2 安装 在终端中输入下列代码 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew ins
  • Dockerfile build镜像的构建环境(build Context)

    文章目录 环境简介 执行构建 理解docker build 的工作原理 最佳实践 通过dockerfile定义文件和docker build命令构建 是推荐使用的镜像构建方式 通常在执行docker build的命令时 最后会加上 这个被当
  • ORA-01578: ORACLE 数据块损坏

    time 2008 6 12 18 35 author skate os winxp db 10g r2 错误提示 ORA 01578 ORACLE 数据块损坏 文件号 6 块号 20 ORA 01110 数据文件 6 F ORACLE P