Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

21

主题
1#
发表于 2012-12-14 10:26:52 | 查看: 8170| 回复: 13
本帖最后由 lsz_qh 于 2012-12-14 10:28 编辑

环境:X2-2 Exadata 四分之一配
DB:11.2.0.3.7
问题:select 报ORA-08103: object no longer exists,处理过程中select owner,segment_name,tablespace_name from dba_extents where file_id=6 and 1004600 between block_id and block_id+blocks-1;结果为空,而且dbv检测没有坏块?谢谢!

处理过程:
昨天晚上测试,在执行select count(*) from XJDW.MD_SERV_PROD_INCOME_M_LIUSZ;时报错,错误信息如下:
  1. SQL> select count(*) from XJDW.MD_SERV_PROD_INCOME_M_LIUSZ;
  2. select count(*) from XJDW.MD_SERV_PROD_INCOME_M_LIUSZ
  3. *
  4. ERROR at line 1:
  5. ORA-08103: object no longer exists
复制代码
查询表中前20行数据,能返回结果,说明有坏块产生,查询该表所在的表空间为TS_XJDW_DATA,
对应的数据文件为:+DATA_EDW01/edwprd/datafile/ts_xjdw_data.297.791555075,
file_id=7.

参考mos上的OERR: ORA-8103 "object no longer exists" / Troubleshooting, Diagnostic and Solution [ID 8103.1]
分析该问题:

  1. alter session set events '8103 trace name errorstack level 3';
  2. alter session set events '10236 trace name context forever, level 1';
  3. alter session set tracefile_identifier='ORA8103';
复制代码
执行select count(*) from XJDW.MD_SERV_PROD_INCOME_M_LIUSZ;
执行完查询后,查看生成的trace文件
/u01/app/oracle/diag/rdbms/edwprd/edwprd1/trace/edwprd1_ora_24557_ORA8103.trc
发现如下信息:

  1. *** 2012-12-13 22:47:59.214
  2. *** SESSION ID:(2909.13027) 2012-12-13 22:47:59.214
  3. *** CLIENT ID:() 2012-12-13 22:47:59.214
  4. *** SERVICE NAME:(SYS$USERS) 2012-12-13 22:47:59.214
  5. *** MODULE NAME:([email]sqlplus@edw01edwprd01.xjods.com[/email] (TNS V1-V3)) 2012-12-13 22:47:59.214
  6. *** ACTION NAME:() 2012-12-13 22:47:59.214


  7. *** TRACE CONTINUED FROM FILE /u01/app/oracle/diag/rdbms/edwprd/edwprd1/trace/edwprd1_ora_24557.trc ***

  8. KTRVAC: path typ=0, rdba=18f5438
复制代码
将十六进制的18f5438转换成十进制:18f5438-->26170424

用以下命令查询出relative_fno和block#

  1. select dbms_utility.data_block_address_file(26170424) relative_fno
  2. ,dbms_utility.data_block_address_block(26170424) block#
  3. from dual;

  4. SQL> select dbms_utility.data_block_address_file(26170424) relative_fno
  5.   2  ,dbms_utility.data_block_address_block(26170424) block#
  6.   3  from dual;

  7. RELATIVE_FNO     BLOCK#
  8. ------------ ----------
  9.            6    1004600
复制代码
然后用以下命令查询出坏块所在的对象:

  1. select owner,segment_name,tablespace_name from dba_extents
  2. where file_id=6 and 1004600 between block_id and block_id+blocks-1;
复制代码
结果为空,进一步查看file_id=6的数据文件信息,结果如下:

  1. SQL> select tablespace_name,file_name from dba_data_files where file_id=6;
  2. TABLESPACE_NAME                FILE_NAME
  3. ------------------------------ ------------------------------------------------------------
  4. TS_WORK_DATA                   +DATA_EDW01/edwprd/datafile/ts_work_data.296.791554661
复制代码
但是从这得到的结果跟实际坏块所在对象对应的表空间不一致,更不提数据文件了,这是为什么呢?

进一步用dbv检查坏块所在的对象对应的表空间对应的数据文件,结果如下:

  1. dbv userid=grid/welcome1 file='+DATA_EDW01/edwprd/datafile/ts_xjdw_data.297.791555075'

  2. [oracle@edw01edwprd01 ~]$ dbv userid=xxx/xx file='+DATA_EDW01/edwprd/datafile/ts_xjdw_data.297.791555075'

  3. DBVERIFY: Release 11.2.0.3.0 - Production on Fri Dec 14 00:13:17 2012

  4. Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

  5. DBVERIFY - Verification starting : FILE = +DATA_EDW01/edwprd/datafile/ts_xjdw_data.297.791555075


  6. DBVERIFY - Verification complete

  7. Total Pages Examined         : 39321600
  8. Total Pages Processed (Data) : 25321552
  9. Total Pages Failing   (Data) : 0
  10. Total Pages Processed (Index): 6353
  11. Total Pages Failing   (Index): 0
  12. Total Pages Processed (Other): 200343
  13. Total Pages Processed (Seg)  : 0
  14. Total Pages Failing   (Seg)  : 0
  15. Total Pages Empty            : 13793352
  16. Total Pages Marked Corrupt   : 0
  17. Total Pages Influx           : 0
  18. Total Pages Encrypted        : 0
  19. Highest block SCN            : 0 (0.0)
复制代码
显示没有坏块。

能不能帮忙分析一下,哪一块出问题了,为什么select owner,segment_name,tablespace_name from dba_extents
where file_id=6 and 1004600 between block_id and block_id+blocks-1;结果为空,而且dbv检测没有坏块?谢谢!
2#
发表于 2012-12-14 10:27:31
请将生成的errorstack 上传

回复 只看该作者 道具 举报

3#
发表于 2012-12-14 10:33:01
附件是生成的trace,麻烦您看看,谢谢了。

trace.zip

778.06 KB, 下载次数: 1234

回复 只看该作者 道具 举报

4#
发表于 2012-12-14 10:54:48
buffer tsn: 8 rdba: 0x018f5438 (1024/26170424)

BH (0x4d3b88618) file#: 7 rdba: 0x018f5426 (1024/26170406) class: 1 ba: 0x4d0b0a000
  set: 51 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25
  dbwrid: 2 obj: 80962 objn: 80962 tsn: 8 afn: 7 hint: f
  hash: [0x5b3571c00,0x5b3571c00] lru: [0x7bb1be08,0x2cbca5108]
  ckptq: [NULL] fileq: [NULL] objq: [0xdbc4d3b0,0x5678740a0] objaq: [0xdbc4d3c0,0x567874090]
  use: [0x5bf904930,0x5bf904930] wait: [NULL]
  st: READING md: EXCL tch: 0 le: 0x35fe10d88
  flags: only_sequential_access remote_transfered
  Using State Objects


BH (0x4d3b88618) file#: 7 rdba: 0x018f5426 (1024/26170406) class: 1 ba: 0x4d0b0a000
  set: 51 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25
  dbwrid: 2 obj: 80962 objn: 80962 tsn: 8 afn: 7 hint: f
  hash: [0x5b3571c00,0x5b3571c00] lru: [0x7bb1be08,0x2cbca5108]
  ckptq: [NULL] fileq: [NULL] objq: [0xdbc4d3b0,0x5678740a0] objaq: [0xdbc4d3c0,0x567874090]
  use: [0x5bf904930,0x5bf904930] wait: [NULL]
  st: READING md: EXCL tch: 0 le: 0x35fe10d88
  flags: only_sequential_access remote_transfered
  Using State Objects

select count(*) from XJDW.MD_SERV_PROD_INCOME_M_LIUSZ


action plan:

select file#,name from v$datafile where ts#=8;
select FILE#,DBARFIL,DBABLK from x$bh where upper(ba)=upper('0x4d0b0a000');


analyze table MD_SERV_PROD_INCOME_M_LIUSZ validate structure;

执行analyze命令 若生成trace 上传

回复 只看该作者 道具 举报

5#
发表于 2012-12-14 11:06:51
  1. SQL> select file#,name from v$datafile where ts#=8;

  2.      FILE# NAME
  3. ---------- ----------------------------------------------------------------------
  4.          7 +DATA_EDW01/edwprd/datafile/ts_xjdw_data.297.791555075

  5. SQL> select FILE#,DBARFIL,DBABLK from x$bh where upper(ba)=upper('0x4d0b0a000');

  6. no rows selected

  7. SQL> analyze table xjdw.MD_SERV_PROD_INCOME_M_LIUSZ validate structure;
  8. analyze table xjdw.MD_SERV_PROD_INCOME_M_LIUSZ validate structure
  9. *
  10. ERROR at line 1:
  11. ORA-14508: specified VALIDATE INTO table not found


  12. SQL> select sid from v$mystat where  rownum=1;

  13.        SID
  14. ----------
  15.       2908

  16. SQL> select spid from v$process where addr=(select paddr from v$session where sid=2908);

  17. SPID
  18. ------------------------
  19. 22369
复制代码
在trace目录中没有发现22369对应的trace文件

昨天我也尝试执行过analyze table xjdw.MD_SERV_PROD_INCOME_M_LIUSZ validate structure;该命令,错误信息跟今天报的一样。

回复 只看该作者 道具 举报

6#
发表于 2012-12-14 13:15:38
lsz_qh 发表于 2012-12-14 11:06
在trace目录中没有发现22369对应的trace文件

昨天我也尝试执行过analyze table xjdw.MD_SERV_PROD_INCOME_ ...

这应当是因为  xjdw.MD_SERV_PROD_INCOME_M_LIUSZ 是分区表

action plan:

analyze table <name> partition (<partition_name>) validate structure

回复 只看该作者 道具 举报

7#
发表于 2012-12-14 14:49:53
  1. analyze table XJDW.MD_SERV_PROD_INCOME_M_LIUSZ partition (<partition_name>) validate structure;
复制代码
也报错,根据错误信息ORA-14508,查mos,参考ORA-14508: ANALYZE PARTITION TABLE VALIDATE STRUCTURE CASCADE [ID 111990.1],运行脚本:
  1. @?/rdbs/admin/utlvalid.sql
复制代码
然后再次执行,前几个分区没问题,到
  1. analyze table xjdw.md_serv_prod_income_m_liusz partition (P_1060)    validate structure cascade into invalid_rows;
  2. analyze table xjdw.md_serv_prod_income_m_liusz partition (P_1075)    validate structure cascade into invalid_rows;
复制代码
时报错,信息如下:
  1. analyze table xjdw.md_serv_prod_income_m_liusz partition (P_1060)    validate structure cascade into invalid_rows
  2. *
  3. ERROR at line 1:
  4. ORA-08103: object no longer exists

  5. analyze table xjdw.md_serv_prod_income_m_liusz partition (P_1075)    validate structure cascade into invalid_rows
  6. *
  7. ERROR at line 1:
  8. ORA-08103: object no longer exists
复制代码
等所有分区都执行完成后,查看 invalid_rows表也没数据。

附件是该操作生成的trace,麻烦你看看,谢谢了。

edwprd1_ora_17458.zip

3.27 KB, 下载次数: 1526

回复 只看该作者 道具 举报

8#
发表于 2012-12-15 01:01:46
找到坏块,然后使用一些方法破坏这个块
然后使用event 跳过这个坏块

回复 只看该作者 道具 举报

9#
发表于 2012-12-15 13:18:48
BH (0x1afc08298) file#: 7 rdba: 0x018f5426 (1024/26170406) class: 1 ba: 0x1ad5b0000
  set: 70 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25
  dbwrid: 0 obj: 80962 objn: 80962 tsn: 8 afn: 7 hint: f
  hash: [0x5b3571c00,0x5b3571c00] lru: [0x1f3ca0d88,0x21fb8bb88]
  ckptq: [NULL] fileq: [NULL] objq: [0x3dfcfdab0,0xf4524b60] objaq: [0x3dfcfdac0,0xf4524b50]
  use: [0x5a06c00e8,0x5a06c00e8] wait: [NULL]
  st: READING md: EXCL tch: 0 atm: 924371336,924379638
  flags: only_sequential_access affinity_lock
  Using State Objects
    ------------------------


FILE 7 block  26170406 、26174139 , 这个 FILE# 7大概是BIG DATAFILE?  是这个块引起了ORA-8103 ,dump 这个2个数据块看一下
*** 2012-12-14 14:38:10.550
kcbzibmlt: dump suspect buffer, err=8103
buffer tsn: 8 rdba: 0x018f62bb (1024/26174139)
scn: 0x0000.00000000 seq: 0x01 flg: 0x05 tail: 0x00000001

回复 只看该作者 道具 举报

10#
发表于 2012-12-17 11:33:52
谢谢ML,谢谢xifenfei,附件是我dump出来的FILE 7 block  26170406 、26174139 这2个数据块。
注:这个data file是bigfile。

数据文件块dump.zip

12.01 KB, 下载次数: 1425

回复 只看该作者 道具 举报

11#
发表于 2012-12-17 12:37:46
你dump到的是一个普通的data block,而不是 segment header或者别的什么关键数据块


seg/obj: 0x13c42  => data_object_id 80962 的是什么对象?

Block header dump:  0x018f5426
Object id on Block? Y
seg/obj: 0x13c42  csc: 0xb70.5b660f83  itc: 3  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x18f5202 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0083.01f.000009aa  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x018f5426
data_block_dump,data header at 0x2aadcdc47a7c
===============

回复 只看该作者 道具 举报

12#
发表于 2012-12-17 13:11:21
我dump数据块的语句如下:
  1. alter system dump datafile 7 block 26170406 ;
  2. alter system dump datafile 7 block 26174139 ;
复制代码
data_object_id=80962 的对象为现在有坏块的这个表:
  1. SQL> select owner,object_name,object_id,data_object_id from dba_objects where data_object_id= 80962 ;
  2. OWNER                          OBJECT_NAME                                         OBJECT_ID DATA_OBJECT_ID
  3. ------------------------------ -------------------------------------------------- ---------- --------------
  4. XJDW                           MD_SERV_PROD_INCOME_M_LIUSZ                             80962          80962

  5. SQL> select owner,object_name,object_id,data_object_id from dba_objects where object_id=80962;

  6. OWNER                          OBJECT_NAME                                         OBJECT_ID DATA_OBJECT_ID
  7. ------------------------------ -------------------------------------------------- ---------- --------------
  8. XJDW                           MD_SERV_PROD_INCOME_M_LIUSZ                             80962          80962
复制代码
第一次报错后我查dba_objects,表名为MD_SERV_PROD_INCOME_M_LIUSZ的表,object_id是80962 ,但data_object_id有好多值,现在object_id和data_object_id的值一致,这是analyze的结果吗?谢谢你了

回复 只看该作者 道具 举报

13#
发表于 2012-12-17 13:38:37
怀疑存在 pagetable/extent control block上的逻辑讹误, 你dump出来的块是普通的data block而非什么关键性的数据块理论上不该引起ORA-8103, 而恰恰引起了 这可能意味着存在块位置的逻辑偏移

考虑参考  http://www.askmaclean.com/archives/resolve-ora-08103-error.html  中的建议:

3. 有条件的情况下对该表所在tablespace做一个 dbms_space_admin.ASSM_TABLESPACE_VERIFY
4. 有条件的情况下move这张表或者相关的分区,尝试绕过该问题
5. 有条件的情况下降该表或分区移动到MSSM表空间上,绕过该问题

回复 只看该作者 道具 举报

14#
发表于 2012-12-17 13:59:38
嗯,好的,谢谢你了,我按照你的建议做一下

回复 只看该作者 道具 举报

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

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 04:21 , Processed in 0.053341 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569