楼主: lcl_yqj

Oracle8.0.5中dbms_repair包问题

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2005-1-5 08:58 | 只看该作者
最初由 yangtingkun 发布
[B]以SYS连接数据库
DESC DBMS_REPAIR
看看DBMS_REPAIR包是否存在。
关于DBMS_REPAIR包的使用可以参考:http://blog.itpub.net/post/468/9121 [/B]

谢谢您,但是这个包在8.0.5中没有,而且估计我的数据库里的坏块都是二进制数据

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2005-1-5 09:57 | 只看该作者
谁知道,block是记录在那个系统表里面

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
13#
发表于 2005-1-5 10:17 | 只看该作者
最初由 lcl_yqj 发布
[B]我在读数据库的时候出现这样的错误:ORA-01578: ORACLE data block corrupted (file # 9, block # 157735)
现在,我想能不能找到这个块所在的segment然后drop掉这个segment,最后create segment,这样丢失的数据也只有一部分,不会全部都丢失的。
所以我去查这个块在那个segment里
select SEGMENT_TYPE,OWNER || '.' || SEGMENT_NAME FROM DBA_EXTENTS WHERE FILE_ID = 9 and block_ID between 157735 and 157735 + blocks -1;
但是,却查不到记录,不知道是什么原因?(上面的错误提示却总是在应用程序中出现)是不是我写错了,还是有另外的sql statement? [/B]


你现在能否定位到哪张表有问题?
如果能的话,请去一下rowid。
select rowid from table_name where rownum = 1;

另外,描述一下你的表的特点:比如分区表?索引组织表?cluster表?对象表?还是普通的堆表?
是否包含了LOB字段,如果有的话,lob是否单独存储。
是否包含LONG?
最好把表的结果贴出来

btw:刚才想要点引用,没想到点成了编辑,发完了贴,我还在奇怪,怎么刚才发的东西找不到了。

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
14#
发表于 2005-1-5 10:23 | 只看该作者
如果,查不到rowid也没有关系。
到DBA_OBJECT表中查询一下这张表的DATA_OBJECT_ID和OBJECT_ID。
SELECT DATA_OBJECT_ID, OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME = '' AND OWNER = ''

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
15#
发表于 2005-1-5 10:36 | 只看该作者
最初由 lcl_yqj 发布
[B]我在读数据库的时候出现这样的错误:ORA-01578: ORACLE data block corrupted (file # 9, block # 157735)
现在,我想能不能找到这个块所在的segment然后drop掉这个segment,最后create segment,这样丢失的数据也只有一部分,不会全部都丢失的。
所以我去查这个块在那个segment里
select SEGMENT_TYPE,OWNER || '.' || SEGMENT_NAME FROM DBA_EXTENTS WHERE FILE_ID = 9 and block_ID between 157735 and 157735 + blocks -1;
但是,却查不到记录,不知道是什么原因?(上面的错误提示却总是在应用程序中出现)是不是我写错了,还是有另外的sql statement? [/B]


语句写错了:block_id返回的是段头的ID,blocks是块数,所以应该是:

select segment_name, segment_type, block_id, blocks
        from dba_extents
        where (157735 between block_id and (block_id + blocks - 1))

如果是索引,直接DROP,重建就可以了;
如果是表的话,可以利用一个好的索引中的ROWID搜索出不在坏块中的数据。

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2005-1-5 11:39 | 只看该作者
表结构是这样
create table TPIMAGE
(
  MQ_ID      NUMBER(9) not null,
  KEYNO      VARCHAR2(20) not null,
  FINGERPOS  NUMBER(2) not null,
  FPIMAGE    LONG RAW,
  FPIMAGELEN NUMBER(6)
);
就是普通的表
其中keyno,fingerpos是主键,没有索引,fpimage里面保存的二进制数据。
这个
select segment_name, segment_type, block_id, blocks
  from dba_extents
  where (157735 between block_id and (block_id + blocks - 1))
没有记录返回,我想可能是索引没有坏。
我用
analyze table tpimage validate structure casecade;分析表,发现还是出现跟上面相同的错误。我想可能是永久性的物理坏块。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
17#
发表于 2005-1-5 11:46 | 只看该作者
最初由 lcl_yqj 发布
[B]表结构是这样
select segment_name, segment_type, block_id, blocks
  from dba_extents
  where (157735 between block_id and (block_id + blocks - 1))
[/B]


没有file_id,你加上file_id  :

select segment_name, segment_type, block_id, blocks
  from dba_extents
  where  file_id=9 and (157735 between block_id and (block_id + blocks - 1))

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
18#
发表于 2005-1-5 12:19 | 只看该作者
查询一下rowid或者这个值:
select object_id, data_object_id from user_objects where object_name = 'TPIMAGE'

使用道具 举报

回复
论坛徽章:
0
19#
 楼主| 发表于 2005-1-5 14:42 | 只看该作者
没有记录返回

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
20#
发表于 2005-1-5 14:46 | 只看该作者
用DBA_OBJECTS查一下

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表