沒有備份的情況下如何處理logical & physical corrupt block

oliseh發表於2015-07-14

###生成測試表和索引
create tablespace tsind datafile '/oradata06/testaaaaa/tsind_1.dbf' size 32m;
create table t0609_2 tablespace TS0608 as select *from all_users where 0=1;
insert into t0609_2 select * from all_users where rownum<2;
commit;
alter table t0609_2 minimize records_per_block;
delete t0609_2;
commit;
insert into t0609_2 select *from all_users;
commit;

> desc t0609_2;
 Name                                                                                Null?    Type
 ----------------------------------------------------------------------------------- -------- --------------------------------------------------------
 USERNAME                                                                            NOT NULL VARCHAR2(30)
 USER_ID                                                                             NOT NULL NUMBER
 CREATED                                                                             NOT NULL DATE

set linesize 150 pagesize 30
select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),username,user_id,created from t0609_2;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) USERNAME                          USER_ID CREATED
------------------------------------ ------------------------------------ ------------------------------ ---------- -----------------
                                   9                                  140 XS$NULL                        2147483638 20150130 23:25:24
                                   9                                  140 SYSADM11                               57 20150324 19:03:42
                                   9                                  141 SCOTT4                                 55 20150202 11:43:52
                                   9                                  141 FSYSTEM                                56 20150220 07:09:08
                                   9                                  142 SCOTT3                                 54 20150201 21:01:12
                                   9                                  142 SCOTT2                                 53 20150201 21:01:12
                                   9                                  143 XDB                                    52 20150130 23:22:39
                                   9                                  143 CTXSYS                                 49 20150130 22:32:12
                                   9                                  144 REMOTE_SCHEDULER_AGENT                 48 20150130 16:41:15
                                   9                                  144 ANONYMOUS                              41 20150130 16:21:49
                                   9                                  145 MGMT_VIEW                              39 20150109 21:13:05
                                   9                                  145 SYSMAN                                 37 20150109 21:09:40
                                   9                                  146 SCOTT                                  36 20141209 15:17:00
                                   9                                  146 PPIP                                   35 20141202 16:06:22
                                   9                                  147 APPQOSSYS                              31 20141110 21:28:49
                                   9                                  147 DBSNMP                                 30 20141110 21:28:47
                                   9                                  148 ORACLE_OCM                             21 20141110 21:18:49
                                   9                                  148 DIP                                    14 20141110 21:18:04
                                   9                                  149 OUTLN                                   9 20141110 21:16:14
                                   9                                  149 SYSTEM                                  5 20141110 21:16:12
                                   9                                  150 SYS                                     0 20141110 21:16:12

create index ind_t0609_2_uid on t0609_2(user_id) tablespace tsind;

////////////
// 方法1:使用dbms_repair.skip_corrupt_block跳過physical corrupt
////////////
---BBED physical corrupt block 9/140
set filename '/oradata06/testaaaaa/ts0608_1.dbf'
set block 140

BBED> print chkval_kcbh
ub2 chkval_kcbh                             @16       0x7fd8

BBED> modify /x 0x8888
 File: /oradata06/testaaaaa/ts0608_1.dbf (0)
 Block: 140              Offsets:   16 to  135           Dba:0x00000000
------------------------------------------------------------------------
 88880000 01000000 00008e7c 6381b7a5 0b920000 00023200 02400088 000a0000
 00010343 00c14286 2d6c0700 20020000 6381b7d8 00000000 00000000 00000000
 00000000 00000000 00000000 00000000 00000000 00010002 ffff0016 1f2d1f51
 1f510000 00021f2d 1f470000 00000000 00000000 00000000

 <32 bytes per line>

alter system flush buffer_cache;

---create admin_tables
exec dbms_repair.admin_tables(table_name=>'REPAIR_0609_2',table_type=>dbms_repair.REPAIR_TABLE,action=>dbms_repair.CREATE_ACTION,tablespace=>'XDBTS');


---check_object

variable v_corrupt_count number;
exec DBMS_REPAIR.CHECK_OBJECT (schema_name=>'SYS',object_name=>'T0609_2',object_type=>dbms_repair.TABLE_OBJECT,repair_table_name=>'REPAIR_0609_2',corrupt_count=>:v_corrupt_count);
print :v_corrupt_count

V_CORRUPT_COUNT
---------------
              1


---repair_表內容,已被標記為corrupt

col REPAIR_DESCRIPTION format a30
col OBJECT_NAME format a10
set linesize 140
select object_id,relative_file_id,block_id,object_name,repair_description,marked_corrupt,check_timestamp,fix_timestamp from dba_REPAIR_0609_2;

 OBJECT_ID RELATIVE_FILE_ID   BLOCK_ID OBJECT_NAM REPAIR_DESCRIPTION             MARKED_COR CHECK_TIMESTAMP   FIX_TIMESTAMP
---------- ---------------- ---------- ---------- ------------------------------ ---------- ----------------- -----------------
     36476                9        140 T0609_2    mark block software corrupt    TRUE       20150609 15:58:10


---此時dump block 9/140的結果是:

Block dump from disk:
buffer tsn: 15 rdba: 0x0240008c (9/140)
scn: 0x0b92.6381b7d8 seq: 0x01 flg: 0x06 tail: 0xb7d80601
frmt: 0x02 chkval: 0x8888 type: 0x06=trans data
Hex dump of corrupt header 3 = CHKVAL
Dump of memory from 0x000000011085DA00 to 0x000000011085DA14
11085DA00 06A20000 0240008C 6381B7D8 0B920106  [.....@..c.......]
11085DA10 88880000                             [....]
Hex dump of corrupt block


---因為執行完check_object後block已經被marked corrupt,所以再次執行fix_corrupt_blocks返回number of fixed block is 0

variable v_fix_count number;
exec DBMS_REPAIR.FIX_CORRUPT_BLOCKS(schema_name=>'SYS',object_name=>'T0609_2',object_type=>DBMS_REPAIR.TABLE_OBJECT,repair_table_name=>'REPAIR_0609_2',fix_count=>:v_fix_count);
print :v_fix_count

V_FIX_COUNT
-----------
          0


---FTS訪問返回0 rows,無論結果集是否包含corrupt block裡的記錄

> select /*+ full(t0609_2) */ * from t0609_2;
select /*+ full(t0609_2) */ * from t0609_2
              *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 9, block # 140)
ORA-01110: data file 9: '/oradata06/testaaaaa/ts0608_1.dbf'

SQL> select /*+ full(t0609_2) */ * from t0609_2 where user_id<60;
select /*+ full(t0609_2) */ * from t0609_2 where user_id<60
                                  *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 9, block # 140)
ORA-01110: data file 9: '/oradata06/testaaaaa/ts0608_1.dbf'

> select /*+ full(t0609_2) */ * from t0609_2 where user_id<30;
select /*+ full(t0609_2) */ * from t0609_2 where user_id<30
                                   *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 9, block # 140)
ORA-01110: data file 9: '/oradata06/testaaaaa/ts0608_1.dbf'

---index訪問時如果結果集不包含corrupt block裡的記錄,能正常返回,否則可能會部分rows或者0 rows
***結果集不在corrupt,正常返回所有滿足條件的rows
> select /*+ index(t0609_2,ind_t0609_2_uid) */ * from t0609_2 where user_id<57;

USERNAME                          USER_ID CREATED
------------------------------ ---------- -----------------
SYS                                     0 20141110 21:16:12
SYSTEM                                  5 20141110 21:16:12
OUTLN                                   9 20141110 21:16:14
DIP                                    14 20141110 21:18:04
ORACLE_OCM                             21 20141110 21:18:49
DBSNMP                                 30 20141110 21:28:47
APPQOSSYS                              31 20141110 21:28:49
PPIP                                   35 20141202 16:06:22
SCOTT                                  36 20141209 15:17:00
SYSMAN                                 37 20150109 21:09:40
MGMT_VIEW                              39 20150109 21:13:05
ANONYMOUS                              41 20150130 16:21:49
REMOTE_SCHEDULER_AGENT                 48 20150130 16:41:15
CTXSYS                                 49 20150130 22:32:12
XDB                                    52 20150130 23:22:39
SCOTT2                                 53 20150201 21:01:12
SCOTT3                                 54 20150201 21:01:12
SCOTT4                                 55 20150202 11:43:52
FSYSTEM                                56 20150220 07:09:08

***結果集部分包含在corrupt blocks,返回non-corrupt block所含rows的情況
> select /*+index(t0609_2,ind_t0609_2_uid) */ * from t0609_2 where user_id<60;

USERNAME                          USER_ID CREATED
------------------------------ ---------- -----------------
SYS                                     0 20141110 21:16:12
SYSTEM                                  5 20141110 21:16:12
OUTLN                                   9 20141110 21:16:14
DIP                                    14 20141110 21:18:04
ORACLE_OCM                             21 20141110 21:18:49
DBSNMP                                 30 20141110 21:28:47
APPQOSSYS                              31 20141110 21:28:49
PPIP                                   35 20141202 16:06:22
SCOTT                                  36 20141209 15:17:00
SYSMAN                                 37 20150109 21:09:40
MGMT_VIEW                              39 20150109 21:13:05
ANONYMOUS                              41 20150130 16:21:49
REMOTE_SCHEDULER_AGENT                 48 20150130 16:41:15
CTXSYS                                 49 20150130 22:32:12
XDB                                    52 20150130 23:22:39
ERROR:
ORA-01578: ORACLE data block corrupted (file # 9, block # 140)
ORA-01110: data file 9: '/oradata06/testaaaaa/ts0608_1.dbf'

***結果集部分包含在corrupt blocks,返回0 rows的情況
> select /*+ index(t0609_2,ind_t0609_2_uid) */ * from t0609_2 where user_id>50;
ERROR:
ORA-01578: ORACLE data block corrupted (file # 9, block # 140)
ORA-01110: data file 9: '/oradata06/testaaaaa/ts0608_1.dbf'

---建立orphan_ table
exec dbms_repair.admin_tables(table_name=>'ORPHAN_IND_0609_2',table_type=>dbms_repair.ORPHAN_TABLE,action=>dbms_repair.CREATE_ACTION,tablespace=>'XDBTS');


---使用DBMS_REPAIR.DUMP_ORPHAN_KEYS檢索出index中有多少條目對應於corrupt block裡的記錄

variable v_ind_corrupt number;
EXEC DBMS_REPAIR.DUMP_ORPHAN_KEYS (SCHEMA_NAME => 'SYS',OBJECT_NAME => 'IND_T0609_2_UID',OBJECT_TYPE => dbms_repair.index_object,REPAIR_TABLE_NAME => 'REPAIR_0609_2',ORPHAN_TABLE_NAME=> 'ORPHAN_IND_0609_2',KEY_COUNT =>:v_ind_corrupt);
print :v_ind_corrupt

V_IND_CORRUPT
-------------
            2

---ORPHAN_IND_0609_2表中記錄了corrupt block裡的rowid
col index_name format a15
col table_name format a8
col keyrowid format a20
col key format a25
set linesize 140
select index_name,index_id,table_name,table_id,keyrowid,key,dump_timestamp from ORPHAN_IND_0609_2;
INDEX_NAME        INDEX_ID TABLE_NA   TABLE_ID KEYROWID             KEY                       DUMP_TIMESTAMP
--------------- ---------- -------- ---------- -------------------- ------------------------- -----------------
IND_T0609_2_UID      36477 T0609_2       36476 AAAI58AAJAAAACMAAA   *BAAAAAAGxRYwMSUn/g       20150609 16:56:39
IND_T0609_2_UID      36477 T0609_2       36476 AAAI58AAJAAAACMAAB   *BAAAAAACwTr+             20150609 16:56:39

---在無法recover corrupt block的情況下可以使用skip_corrupt_blocks跳過
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(schema_name=>'SYS',object_name=>'T0609_2',object_type=>DBMS_REPAIR.TABLE_OBJECT,flags=>dbms_repair.SKIP_FLAG);


***注意skip_corrupt_block的動作是可逆的,可以使用NOSKIP_FLAG來重現ORA-01578

exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(schema_name=>'SYS',object_name=>'T0609_2',object_type=>DBMS_REPAIR.TABLE_OBJECT,flags=>dbms_repair.NOSKIP_FLAG);
           
> select owner,table_name,skip_corrupt from dba_tables where table_name='T0609_2';

OWNER                          TABLE_NAME                     SKIP_COR
------------------------------ ------------------------------ --------
SYS                            T0609_2                        ENABLED

---測試一下跳過corrupt之後的全表以及索引掃描
**以下FTS訪問均沒有ORA-01578出現
select /*+ full(t0609_2) */ * from t0609_2;
select /*+ full(t0609_2) */ * from t0609_2 where user_id<60;
select /*+ full(t0609_2) */ * from t0609_2 where user_id<30;

**以下INDEX訪問也沒有ORA-01578出現
select /*+ index(t0609_2,ind_t0609_2_uid) */ * from t0609_2 where user_id<57;
select /*+ index(t0609_2,ind_t0609_2_uid) */ * from t0609_2 where user_id<60;
select /*+ index(t0609_2,ind_t0609_2_uid) */ * from t0609_2 where user_id>50;

dbms_repair.skip_corrupt_blocks雖然能夠方便的跳過corrupt block,但有可能帶來index訪問和FTS訪問結果不一致的情況,同樣的一條查詢語句第一條走索引,第二條走全表掃描,得到的結果卻不一樣
> select /*+ index(t0609_2,ind_t0609_2_uid) */ user_id from t0609_2 where user_id>56;

   USER_ID
----------
        57
2147483638

> select /*+ full(t0609_2) */ user_id from t0609_2 where user_id>56;

no rows selected


為了避免產生不一致的結果,需要重建索引,重建索引之前可以選擇將儲存在索引中的鍵值先儲存下來以儘可能挽回較多的資料,例如:

select /*+ index(t0609_2,ind_t0609_2_uid) */ user_id from t0609_2 minus select /*+ full(t0609_2) */ user_id from t0609_2;
   USER_ID
----------
        57
2147483638

---重建索引(注意必須在skip corrupt block的情況下才能重建索引,否則也會有ORA-01578)
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(schema_name=>'SYS',object_name=>'T0609_2',object_type=>DBMS_REPAIR.TABLE_OBJECT,flags=>dbms_repair.NOSKIP_FLAG);

> alter index ind_t0609_2_uid rebuild online;
alter index ind_t0609_2_uid rebuild online
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 9, block # 140)
ORA-01110: data file 9: '/oradata06/testaaaaa/ts0608_1.dbf'

exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(schema_name=>'SYS',object_name=>'T0609_2',object_type=>DBMS_REPAIR.TABLE_OBJECT,flags=>dbms_repair.SKIP_FLAG);

> alter index ind_t0609_2_uid rebuild online;

Index altered.

> select /*+ index(t0609_2,ind_t0609_2_uid) */ user_id from t0609_2 where user_id>56;

no rows selected

> select /*+ full(t0609_2) */ user_id from t0609_2 where user_id>56;

no rows selected


////////////
// 方法2:使用dbms_repair.skip_corrupt_block跳過logical corrupt,和physical corrupt不同需要先使用fix_corrupt_blocks將logical corrupt block標記為soft corrupt block
////////////
###準備測試表
create tablespace ts0610 datafile '/oradata06/testaaaaa/ts0610_1.dbf' size 32m;

create table scott.t0610_1 tablespace ts0610 as select * from all_users;

alter system flush buffer_cache;

set linesize 120 pagesize 30
select distinct dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from scott.t0610_1;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
                                  12                                  131

###BBED修改kdbhnrow,從21改為40
BBED> set filename '/oradata06/testaaaaa/ts0610_1.dbf'
        FILENAME        /oradata06/testaaaaa/ts0610_1.dbf

BBED> set block 131
        BLOCK#          131

BBED> print kdbhnrow
sb2 kdbhnrow                                @126      21

BBED> set offset 126
        OFFSET          126

BBED> examine /h
kdbh.kdbhnrow                               @126    
-------------
 0x0015

BBED> modify /x 0x0028

BBED> sum apply
Check value for File 0, Block 131:
current = 0x0b22, required = 0x0b22

BBED> print kdbhnrow
sb2 kdbhnrow                                @126      40

###select不受影響
> alter system flush buffer_cache;

System altered.

> select count(*) from scott.t0610_1;

  COUNT(*)
----------
        21


###使用dbms_repair.check_object檢測到有logical corrupt block

exec dbms_repair.admin_tables(table_name=>'REPAIR_0610_1',table_type=>dbms_repair.REPAIR_TABLE,action=>dbms_repair.CREATE_ACTION,tablespace=>'XDBTS');

variable v_corrupt_count number;
exec DBMS_REPAIR.CHECK_OBJECT (schema_name=>'SYS',object_name=>'T0609_2',object_type=>dbms_repair.TABLE_OBJECT,repair_table_name=>'REPAIR_0610_1',corrupt_count=>:v_corrupt_count);
print :v_corrupt_count

V_CORRUPT_COUNT
---------------
              1

---DBA_REPAIR_0610_1裡的marked_corrupt=FALSE表示該block尚未被標記為soft corrupt
col REPAIR_DESCRIPTION format a30
col OBJECT_NAME format a10
set linesize 140
select object_id,relative_file_id,block_id,object_name,repair_description,marked_corrupt,check_timestamp,fix_timestamp from DBA_REPAIR_0610_1;
 OBJECT_ID RELATIVE_FILE_ID   BLOCK_ID OBJECT_NAM REPAIR_DESCRIPTION             MARKED_COR CHECK_TIMESTAMP   FIX_TIMESTAMP
---------- ---------------- ---------- ---------- ------------------------------ ---------- ----------------- -----------------
     36543               12        131 T0610_1    mark block software corrupt    FALSE      20150610 20:59:35         


###為避免logical corrupt的影響擴散,使用dbms_repair.fix_corrupt_blocks標記為soft corrupt block

variable v_fix_count number;
exec DBMS_REPAIR.FIX_CORRUPT_BLOCKS(schema_name=>'SCOTT',object_name=>'T0610_1',object_type=>DBMS_REPAIR.TABLE_OBJECT,repair_table_name=>'REPAIR_0610_1',fix_count=>:v_fix_count);
print :v_fix_count
V_FIX_COUNT
-----------
          1

---marked_corrupt=TRUE
> select object_id,relative_file_id,block_id,object_name,repair_description,marked_corrupt,check_timestamp,fix_timestamp from DBA_REPAIR_0610_1;

 OBJECT_ID RELATIVE_FILE_ID   BLOCK_ID OBJECT_NAM REPAIR_DESCRIPTION             MARKED_COR CHECK_TIMESTAMP   FIX_TIMESTAMP
---------- ---------------- ---------- ---------- ------------------------------ ---------- ----------------- -----------------
     36543               12        131 T0610_1    mark block software corrupt    TRUE       20150610 20:59:35 20150610 21:07:37


---marked corrupt後再次訪問該表出現了ORA-01578

> select * from scott.t0610_1;
select * from scott.t0610_1
                    *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 12, block # 131)
ORA-01110: data file 12: '/oradata06/testaaaaa/ts0610_1.dbf'

###從dbv的輸出也可以看出一個block被標記為corrupt
file='/oradata06/testaaaaa/ts0610_1.dbf'

DBVERIFY: Release 11.2.0.3.0 - Production on Wed Jun 10 21:10:30 2015

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

DBVERIFY - Verification starting : FILE = /oradata06/testaaaaa/ts0610_1.dbf

DBV-00200: Block, DBA 50331779, already marked corrupt


DBVERIFY - Verification complete

Total Pages Examined         : 4096
Total Pages Processed (Data) : 1
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 130
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 3965
Total Pages Marked Corrupt   : 1     
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 1669611986 (2962.1669611986)
    
###dump block 12/131發現seq: 0xff
Block dump from disk:
buffer tsn: 18 rdba: 0x03000083 (12/131)
scn: 0x0b92.63844acd seq: 0xff flg: 0x04 tail: 0x4acd06ff
frmt: 0x02 chkval: 0xf6df type: 0x06=trans data
Hex dump of block: st=0, typ_found=1

---在無法recover corrupt block的情況下可以使用skip_corrupt_blocks跳過
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(schema_name=>'SCOTT',object_name=>'T0610_1',object_type=>DBMS_REPAIR.TABLE_OBJECT,flags=>dbms_repair.SKIP_FLAG);


---跳過以後不報ORA-01578錯誤了

> select * from scott.t0610_1;

no rows selected

////////////
// 方法3:使用rowid scan的方式從含有physical/logical corrupt block的表裡抽出其它完好的資料
////////////
###sys.t0609_2表
> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),username,user_id,created from t0609_2;

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) USERNAME                          USER_ID CREATED
------------------------------------ ------------------------------------ ------------------------------ ---------- -----------------
                                  10                                  155 FSYSTEM                                56 20150220 07:09:08
                                  10                                  155 SCOTT4                                 55 20150202 11:43:52
                                  10                                  156 XDB                                    52 20150130 23:22:39
                                  10                                  156 CTXSYS                                 49 20150130 22:32:12
                                  10                                  157 REMOTE_SCHEDULER_AGENT                 48 20150130 16:41:15
                                  10                                  157 ANONYMOUS                              41 20150130 16:21:49
                                  10                                  158 SYSADM11                               57 20150324 19:03:42
                                  10                                  158 XS$NULL                        2147483638 20150130 23:25:24
                                  10                                  159 ORACLE_OCM                             21 20141110 21:18:49
                                  10                                  159 DIP                                    14 20141110 21:18:04
                                  10                                  160 OUTLN                                   9 20141110 21:16:14
                                  10                                  160 SYSTEM                                  5 20141110 21:16:12
                                  10                                  161 SYS                                     0 20141110 21:16:12
                                  10                                  161 MGMT_VIEW                              39 20150109 21:13:05
                                  10                                  162 SYSMAN                                 37 20150109 21:09:40
                                  10                                  162 SCOTT                                  36 20141209 15:17:00
                                  10                                  163 PPIP                                   35 20141202 16:06:22
                                  10                                  163 APPQOSSYS                              31 20141110 21:28:49
                                  10                                  164 DBSNMP                                 30 20141110 21:28:47

###破壞block 10/160
RMAN> recover datafile 10 block 160 clear;

Starting recover at 20150610 21:28:29
using channel ORA_DISK_1
Finished recover at 20150610 21:28:29

> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),username,user_id,created from t0609_2;
ERROR:
ORA-01578: ORACLE data block corrupted (file # 10, block # 160)
ORA-01110: data file 10: '/oradata06/testaaaaa/ts0609_1.dbf'

###構造能夠繞過block 10/160的rowid range
***low range of rowid: 10/160 row_number=0
> select data_object_id from dba_objects where object_name='T0609_2';

DATA_OBJECT_ID
--------------
         36541

select DBMS_ROWID.ROWID_CREATE(rowid_type=>1,object_number=>36541,relative_fno=>10,block_number=>160,row_number=>0) low_rid from dual;
LOW_RID
------------------
AAAI69AAKAAAACgAAA

***high range of rowid: 10/161 row_number=0

select DBMS_ROWID.ROWID_CREATE(rowid_type=>1,object_number=>36541,relative_fno=>10,block_number=>161,row_number=>0) high_rid from dual;
HIGH_RID
------------------
AAAI69AAKAAAAChAAA


###將完好的記錄select出來

select * from t0609_2 where rowid
union all
select * from t0609_2 where rowid>='AAAI69AAKAAAAChAAA';

USERNAME                          USER_ID CREATED
------------------------------ ---------- -----------------
FSYSTEM                                56 20150220 07:09:08
SCOTT4                                 55 20150202 11:43:52
XDB                                    52 20150130 23:22:39
CTXSYS                                 49 20150130 22:32:12
REMOTE_SCHEDULER_AGENT                 48 20150130 16:41:15
ANONYMOUS                              41 20150130 16:21:49
SYSADM11                               57 20150324 19:03:42
XS$NULL                        2147483638 20150130 23:25:24
ORACLE_OCM                             21 20141110 21:18:49
DIP                                    14 20141110 21:18:04
SYS                                     0 20141110 21:16:12
MGMT_VIEW                              39 20150109 21:13:05
SYSMAN                                 37 20150109 21:09:40
SCOTT                                  36 20141209 15:17:00
PPIP                                   35 20141202 16:06:22
APPQOSSYS                              31 20141110 21:28:49
DBSNMP                                 30 20141110 21:28:47

17 rows selected.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/53956/viewspace-1733252/,如需轉載,請註明出處,否則將追究法律責任。

相關文章