gll1989 发表于 2014-3-18 18:45:17

rowid查询数据疑惑

数据库版本:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE        9.2.0.1.0        Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
归档未开
操作系统 window 2003 32
事件:数据库重启后,数据库中的两个数据文件被彻底删除了,未能找回来,处理的方式alter database datafile 26 offline drop,打开数据库。在查询hysqd时,报
ORA-00376: 此时无法读取文件 26
ORA-01110: 数据文件 26: 'Z:\ORACLE\ORA92\DQYY\KT_HMISW2003_7_NEW.ORA'
现在的处理模式
通过rowid去排除26后文件中的内容
处理过程
SQL> SELECT data_object_id FROM DBA_OBJECTS WHERE OBJECT_NAME='HYSQD' AND OBJE
_TYPE='TABLE' AND OWNER='HMISW2003'
  2  ;

DATA_OBJECT_ID
--------------
         36868

SQL> select block_id,blocks from dba_extents Where   RELATIVE_Fno='26' and seG
nt_type='TABLE' AND SEGMENT_NAME='HYSQD'  ORDER BY BLOCK_ID asc
  2  ;

  BLOCK_ID     BLOCKS
---------- ----------
      4233        128

SQL> SELECT dbms_rowid.rowid_create(1,36868,26,4233,0) FROM DUAL
  2  ;

DBMS_ROWID.ROWID_C
------------------
AAAJAEAAaAAABCJAAA

SQL> select  /*+ ROWID(b) */ count(*) FROM  hmisw2003.HYSQD b WHERE ROWId<'AAA
EAAaAAABCJAAA'
  2  ;
select  /*+ ROWID(b) */ count(*) FROM  hmisw2003.HYSQD b WHERE ROWId<'AAAJAEAA
AABCJAAA'
                                                 *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 26
ORA-01110: 数据文件 26: 'Z:\ORACLE\ORA92\DQYY\KT_HMISW2003_7_NEW.ORA'


SQL> EXPLAIN PLAN FOR
  2  select  /*+ ROWID(b) */ count(*) FROM  hmisw2003.HYSQD b WHERE ROWId<'AAA
EAAaAAABCJAAA';

已解释。

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------


----------------------------------------------------------------------------
| Id  | Operation                    |  Name       | Rows  | Bytes | Cost  |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |             |     1 |     7 |   455 |
|   1 |  SORT AGGREGATE              |             |     1 |     7 |       |
|   2 |   TABLE ACCESS BY ROWID RANGE| HYSQD       | 19260 |   131K|   455 |
----------------------------------------------------------------------------

Note: cpu costing is off, 'PLAN_TABLE' is old version

已选择10行。

1、没有搞清楚,rowid为什么没有把26文件过滤掉。
2、遇到文件被删除后,无法恢复,让oracle不要是检索这个文件中的数据,还有别的方式嘛

gll1989 发表于 2014-3-18 18:54:03

补充:hysqd的表结构
页: [1]
查看完整版本: rowid查询数据疑惑