oracle ora-01578 ORACLE 数据块损坏 (文件号 4, 块号 840339)

ORA-01578是 数据块物理坏块/损坏的一种,不同于逻辑损坏/坏块,一般 会伴随ORA-1110出现,一旦ORACLE读取到存在损坏的块就会报出Caused by: java.sql.SQLException: ORA-01578: ORACLE 数据块损坏 (文件号 4, 块号 840339)
ORA-01110: 数据文件 4: ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF‘

解决方法如下:
1、使用DBV检查数据文件,在cmd目录下直接输入dbv file=‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF‘ blocksize=8192;然后等待检测结果
2、检查损坏相关的表
SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents  WHERE file_id = 4 and 840339 between block_id AND block_id + blocks - 1;
查到相关的表名
3、内部事件,设置在全表扫描时跳过损坏的数据块:ALTER SYSTEM SET EVENTS=‘10231 trace name context forever,level 10‘;
4、导出上边相关的表没有损坏的数据exp test/test file=t.dmp tables=t
5、删除损坏相关的表 drop table t;
再将数据做导入imp test/test file=t.dmp tables=t

时间: 2024-10-11 04:16:12

oracle ora-01578 ORACLE 数据块损坏 (文件号 4, 块号 840339)的相关文章

ORA-01578: ORACLE 数据块损坏 (文件号 13, 块号 2415081) ORA-01110: 数据文件XXXXXX

1.使用DBV检查数据文件,在cmd执行:dbv file='E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' blocksize=8192:然后等待检测结果2.检查损坏相关的表: Select owner, segment_name, segment_type from dba_extents where file_id = 13 and 2415081 between block_id and block_id + blocks - 1; 查到相关

oracle学习之数据库数据保存成文件

常常需要将数据库中的数据生成文档,由于比较喜欢脚本的方式,所以就需要使用spool的时候进行格式设置,以下简单整理了一下oracle中进行格式设置的一些东西,一共十八条,其实常用的也就那么几个,稍后会附上自己写的简单的shell操作的脚本,希望能供同样有需要的共同交流,也作为自己的备份. set命令的各项及其含义:arraysize 从数据库中一次提取的行数,默认为15autocommit 是否自动提交,默认为offcolsep 在选定列之间的分隔符,默认为空格echo 在用start命令执行一

oracle/mysql 将查询数据导出到文件中

一.将oracle 查询的数据导入到一个文本文件中方法一 :通过sql developer 工具导出到xls表中方法二:通过客户端sqlplus 到一个临时txt文件中再处理着重讲方法二(在使用场景下方便.快捷)SQL>spool d:sqlbak.txt;SQL>select * from table where a>x;SQL>spool off;这样刚查询的数据就好在d盘下的 sqlbak.txt 文件中,linux下同理: spool /tmp/sqlbak.txt 二.

oracle 使用 UTL_FILE 导出表数据到txt文件

环境: Red Hat Enterprise Linux Server release 6.6 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production --创建目录 create or replace directory TXT_DIR as '/opt/oracle/database/exptxt'; grant read,write on directory TXT_DIR to manager

Oracle impdp批量导入数据 多个文件

impdp test/[email protected]/orcl directory=database dumpfile=test_20200327%U.DMP schemas=test  logfile=imp.log %U==占位符,对应多个文件的后缀01,02..... 导入导出,参考一下 https://www.cnblogs.com/YQYC/p/11798797.html 原文地址:https://www.cnblogs.com/shihx/p/12597547.html

案例:Oracle exp dmp文件存在坏块并损坏 使用CPFL跳过坏块并成功导入恢复

Oracle数据库exp导出dmp文件损坏存在坏块/corruption通过CPFL工具跳过dmp坏块进发导入 在有些情况下,大家都知道通过dul可以恢复损坏的dmp文件的表的数据,但是该方法有很多问题,特别是对很多数据类型的支持不够完美,比如lob,long raw类型等,而且还有可能恢复出来数据大量丢失,本人通过对dmp结构的分析,使用使用一些特殊的技巧方法,可以实现对于损坏的dmp文件,通过跳过异常坏块所在表,继续恢复后续表,从而最大程度减少损坏 1.创建Oracle测试表 SQL> co

Oracle数据块损坏篇之10231内部事件

实验:某个分区数据块损坏,不完全恢复此分区表数据背景:数据库没有有效备份,某个分区中有数据块损坏.要求:最大限度恢复此分区数据.环境:RHEL 6.4 + Oracle 11.2.0.4 1. 初始化实验环境 2. 模拟分区中有数据块损坏情景 3. 尝试使用Oracle内部事件10231进行不完全恢复 Reference 1. 初始化实验环境 初始化创建模拟实验环境用到的表空间.业务用户.表,并导入测试数据.本次实验用到表空间DBS_D_JINGYU, 业务用户JINGYU, 分区表T_PART

Oracle数据块损坏的恢复实例

测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test conn jingyu/jingyu drop table t_test purge; create table t_test (id number, name char(2000)); --Insert data insert into t_test values(1, 'alfred 1');

Oracle 数据块损坏与恢复具体解释

1.什么是块损坏: 所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致. 通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏". 假设是逻辑损坏,则是 Oracle 内部错误. Oracle 数据库检測到不一致之后,就将逻辑损坏的块标记为损坏.假设是介质损坏,则是块格式不对:从磁盘读取的块不包括有意义的信息. 通过恢复块,或者删除包括损坏块的数据库对象(或同一时候採用这两种