Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Here are block dumps OF an IOT, showing PRIMARY KEY VALUES, non-KEY VALUES, overflow VALUES, AND in-ROW LOB VALUES.
- Notes:
- 1. DATABASE character SET IS AL32UTF8. LOB characters are stored 2-bytes Unicode.
- 2. It IS necessary TO checkpoint the instance TO get reliable block DUMP info.
- 3. The NEW TABLESPACE IS FOR a clean slate.
- 4. We INSERT one ROW, DUMP ALL blocks IN extent 1, AND search FOR the columns WITH a text editor.
- [oracle@stormking cdb12102 iot]$ sqlplus /nolog @ iotdump.SQL
- SQL*Plus: RELEASE 12.1.0.2.0 Production ON Sun May 17 22:07:27 2015
- Copyright (c) 1982, 2014, Oracle. ALL rights reserved.
- Connected.
- SQL> COLUMN segment_name new_value segment_name format a30
- SQL> COLUMN index_name new_value index_name format a30
- SQL> COLUMN table_name new_value table_name format a30
- SQL>
- SQL> CREATE TABLESPACE users;
- TABLESPACE created.
- SQL> ALTER USER u DEFAULT TABLESPACE users;
- USER altered.
- SQL>
- SQL> CREATE TABLE tbliot
- 2 (
- 3 p VARCHAR2(10),
- 4 q VARCHAR2(10),
- 5 a VARCHAR2(10),
- 6 b VARCHAR2(10),
- 7 CONSTRAINT tbliot_pk PRIMARY KEY( p,q),
- 8 l clob
- 9 )
- 10 ORGANIZATION INDEX
- 11 including a
- 12 overflow
- 13 lob(l) store AS securefile
- 14 (enable storage IN ROW);
- TABLE created.
- SQL>
- SQL> SELECT segment_name, segment_type, segment_subtype, tablespace_name FROM user_segments;
- SEGMENT_NAME SEGMENT_TYPE SEGMENT_SU TABLESPACE_NAME
- ------------------------------ ------------------ ---------- ------------------------------
- SYS_IOT_OVER_93296 TABLE ASSM USERS
- SYS_IL0000093296C00005$$ LOBINDEX ASSM USERS
- TBLIOT_PK INDEX ASSM USERS
- SYS_LOB0000093296C00005$$ LOBSEGMENT SECUREFILE USERS
- SQL> INSERT INTO tbliot(p,q,a,b,l) VALUES ( 'IIII','QQQQ','AAAA','BBBB','LLLL');
- 1 ROW created.
- SQL> COMMIT;
- COMMIT complete.
- SQL> ALTER SYSTEM checkpoint;
- SYSTEM altered.
- SQL> SELECT segment_name, segment_type, segment_subtype, tablespace_name FROM user_segments;
- SEGMENT_NAME SEGMENT_TYPE SEGMENT_SU TABLESPACE_NAME
- ------------------------------ ------------------ ---------- ------------------------------
- SYS_IOT_OVER_93296 TABLE ASSM USERS
- SYS_IL0000093296C00005$$ LOBINDEX ASSM USERS
- TBLIOT_PK INDEX ASSM USERS
- SYS_LOB0000093296C00005$$ LOBSEGMENT SECUREFILE USERS
- SQL>
- SQL> ALTER SESSION SET tracefile_identifier = iotpk;
- SESSION altered.
- SQL> @ dumpextent.SQL U TBLIOT_PK 0
- SQL> define owner=&&1
- SQL> define segment_name=&&2
- SQL> define exent_id=&&3
- SQL>
- SQL> COLUMN owner format a30
- SQL> COLUMN segment_name format a30
- SQL>
- SQL> COLUMN file_id new_value file_id
- SQL> COLUMN block_min new_value block_min
- SQL> COLUMN block_max new_value block_max
- SQL>
- SQL> SELECT owner, segment_name, extent_id, blocks, file_id, block_id,
- 2 block_id block_min, block_id + blocks - 1 block_max
- 3 FROM dba_extents
- 4 WHERE owner = '&&owner'
- 5 AND segment_name = '&&segment_name'
- 6 AND partition_name IS NULL
- 7 AND extent_id = &&exent_id;
- old 4: WHERE owner = '&&owner'
- NEW 4: WHERE owner = 'U'
- old 5: AND segment_name = '&&segment_name'
- NEW 5: AND segment_name = 'TBLIOT_PK'
- old 7: AND extent_id = &&exent_id
- NEW 7: AND extent_id = 0
- OWNER SEGMENT_NAME EXTENT_ID BLOCKS FILE_ID BLOCK_ID BLOCK_MIN BLOCK_MAX
- ------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
- U TBLIOT_PK 0 8 34 160 160 167
- SQL>
- SQL> ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max;
- old 1: ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max
- NEW 1: ALTER SYSTEM DUMP datafile 34 block MIN 160 block MAX 167
- SYSTEM altered.
- SQL>
- SQL> @ tracefile.SQL
- SQL> COLUMN tracefile new_value tracefile format a120
- SQL>
- SQL> SELECT p.tracefile
- 2 FROM v$process p
- 3 join v$session s ON p.addr = s.paddr
- 4 WHERE s.sid = SYS_CONTEXT('userenv', 'sid' );
- TRACEFILE
- ------------------------------------------------------------------------------------------------------------------------
- /u01/app/oracle/diag/rdbms/cdb12102/cdb12102/trace/cdb12102_ora_14814_IOTPK.trc
- SQL>
- SQL>
- SQL> SELECT table_name, segment_name, index_name FROM user_lobs
- 2 WHERE table_name = 'TBLIOT' AND column_name = 'L';
- TABLE_NAME SEGMENT_NAME INDEX_NAME
- ------------------------------ ------------------------------ ------------------------------
- TBLIOT SYS_LOB0000093296C00005$$ SYS_IL0000093296C00005$$
- SQL> ALTER SESSION SET tracefile_identifier = lobseg;
- SESSION altered.
- SQL> @ dumpextent.SQL U &&segment_name 0
- SQL> define owner=&&1
- SQL> define segment_name=&&2
- SQL> define exent_id=&&3
- SQL>
- SQL> COLUMN owner format a30
- SQL> COLUMN segment_name format a30
- SQL>
- SQL> COLUMN file_id new_value file_id
- SQL> COLUMN block_min new_value block_min
- SQL> COLUMN block_max new_value block_max
- SQL>
- SQL> SELECT owner, segment_name, extent_id, blocks, file_id, block_id,
- 2 block_id block_min, block_id + blocks - 1 block_max
- 3 FROM dba_extents
- 4 WHERE owner = '&&owner'
- 5 AND segment_name = '&&segment_name'
- 6 AND partition_name IS NULL
- 7 AND extent_id = &&exent_id;
- old 4: WHERE owner = '&&owner'
- NEW 4: WHERE owner = 'U'
- old 5: AND segment_name = '&&segment_name'
- NEW 5: AND segment_name = 'SYS_LOB0000093296C00005$$'
- old 7: AND extent_id = &&exent_id
- NEW 7: AND extent_id = 0
- OWNER SEGMENT_NAME EXTENT_ID BLOCKS FILE_ID BLOCK_ID BLOCK_MIN BLOCK_MAX
- ------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
- U SYS_LOB0000093296C00005$$ 0 16 34 136 136 151
- SQL>
- SQL> ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max;
- old 1: ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max
- NEW 1: ALTER SYSTEM DUMP datafile 34 block MIN 136 block MAX 151
- SYSTEM altered.
- SQL>
- SQL> @ tracefile.SQL
- SQL> COLUMN tracefile new_value tracefile format a120
- SQL>
- SQL> SELECT p.tracefile
- 2 FROM v$process p
- 3 join v$session s ON p.addr = s.paddr
- 4 WHERE s.sid = SYS_CONTEXT('userenv', 'sid' );
- TRACEFILE
- ------------------------------------------------------------------------------------------------------------------------
- /u01/app/oracle/diag/rdbms/cdb12102/cdb12102/trace/cdb12102_ora_14814_LOBSEG.trc
- SQL>
- SQL> ALTER SESSION SET tracefile_identifier = lobidx;
- SESSION altered.
- SQL> @ dumpextent.SQL U &&index_name 0
- SQL> define owner=&&1
- SQL> define segment_name=&&2
- SQL> define exent_id=&&3
- SQL>
- SQL> COLUMN owner format a30
- SQL> COLUMN segment_name format a30
- SQL>
- SQL> COLUMN file_id new_value file_id
- SQL> COLUMN block_min new_value block_min
- SQL> COLUMN block_max new_value block_max
- SQL>
- SQL> SELECT owner, segment_name, extent_id, blocks, file_id, block_id,
- 2 block_id block_min, block_id + blocks - 1 block_max
- 3 FROM dba_extents
- 4 WHERE owner = '&&owner'
- 5 AND segment_name = '&&segment_name'
- 6 AND partition_name IS NULL
- 7 AND extent_id = &&exent_id;
- old 4: WHERE owner = '&&owner'
- NEW 4: WHERE owner = 'U'
- old 5: AND segment_name = '&&segment_name'
- NEW 5: AND segment_name = 'SYS_IL0000093296C00005$$'
- old 7: AND extent_id = &&exent_id
- NEW 7: AND extent_id = 0
- OWNER SEGMENT_NAME EXTENT_ID BLOCKS FILE_ID BLOCK_ID BLOCK_MIN BLOCK_MAX
- ------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
- U SYS_IL0000093296C00005$$ 0 8 34 152 152 159
- SQL>
- SQL> ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max;
- old 1: ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max
- NEW 1: ALTER SYSTEM DUMP datafile 34 block MIN 152 block MAX 159
- SYSTEM altered.
- SQL>
- SQL> @ tracefile.SQL
- SQL> COLUMN tracefile new_value tracefile format a120
- SQL>
- SQL> SELECT p.tracefile
- 2 FROM v$process p
- 3 join v$session s ON p.addr = s.paddr
- 4 WHERE s.sid = SYS_CONTEXT('userenv', 'sid' );
- TRACEFILE
- ------------------------------------------------------------------------------------------------------------------------
- /u01/app/oracle/diag/rdbms/cdb12102/cdb12102/trace/cdb12102_ora_14814_LOBIDX.trc
- SQL>
- SQL>
- SQL> COLUMN iot_over new_value iot_over format a30
- SQL> SELECT table_name iot_over, iot_name FROM user_tables WHERE iot_name = 'TBLIOT';
- IOT_OVER IOT_NAME
- ------------------------------ --------------------------------------------------------------------------------------------------------------------------------
- SYS_IOT_OVER_93296 TBLIOT
- SQL> ALTER SESSION SET tracefile_identifier = iotoverflow;
- SESSION altered.
- SQL> @ dumpextent.SQL U &&iot_over 0
- SQL> define owner=&&1
- SQL> define segment_name=&&2
- SQL> define exent_id=&&3
- SQL>
- SQL> COLUMN owner format a30
- SQL> COLUMN segment_name format a30
- SQL>
- SQL> COLUMN file_id new_value file_id
- SQL> COLUMN block_min new_value block_min
- SQL> COLUMN block_max new_value block_max
- SQL>
- SQL> SELECT owner, segment_name, extent_id, blocks, file_id, block_id,
- 2 block_id block_min, block_id + blocks - 1 block_max
- 3 FROM dba_extents
- 4 WHERE owner = '&&owner'-
- 5 AND segment_name = '&&segment_name'
- 6 AND partition_name IS NULL
- 7 AND extent_id = &&exent_id;
- old 4: WHERE owner = '&&owner'
- NEW 4: WHERE owner = 'U'
- old 5: AND segment_name = '&&segment_name'
- NEW 5: AND segment_name = 'SYS_IOT_OVER_93296'
- old 7: AND extent_id = &&exent_id
- NEW 7: AND extent_id = 0
- OWNER SEGMENT_NAME EXTENT_ID BLOCKS FILE_ID BLOCK_ID BLOCK_MIN BLOCK_MAX
- ------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
- U SYS_IOT_OVER_93296 0 8 34 128 128 135
- SQL>
- SQL> ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max;
- old 1: ALTER SYSTEM DUMP datafile &&file_id block MIN &&block_min block MAX &&block_max
- NEW 1: ALTER SYSTEM DUMP datafile 34 block MIN 128 block MAX 135
- SYSTEM altered.
- SQL>
- SQL> @ tracefile.SQL
- SQL> COLUMN tracefile new_value tracefile format a120
- SQL>
- SQL> SELECT p.tracefile
- 2 FROM v$process p
- 3 join v$session s ON p.addr = s.paddr
- 4 WHERE s.sid = SYS_CONTEXT('userenv', 'sid' );
- TRACEFILE
- ------------------------------------------------------------------------------------------------------------------------
- /u01/app/oracle/diag/rdbms/cdb12102/cdb12102/trace/cdb12102_ora_14814_IOTOVERFLOW.trc
- SQL>
- SQL>
- SQL> DROP TABLE tbliot purge;
- TABLE dropped.
- SQL>
- SQL> ALTER USER u DEFAULT TABLESPACE SYSTEM;
- USER altered.
- SQL> DROP TABLESPACE users including contents AND datafiles;
- TABLESPACE dropped.
- The INSERT statement was:
- SQL> INSERT INTO tbliot(p,q,a,b,l) VALUES ( 'IIII','QQQQ','AAAA','BBBB','LLLL');
- Refer TO this ASCII TABLE:
- Hex CHAR
- -----------------
- 41 A
- 42 B
- 49 I
- 4C L
- 51 Q
- Refer TO these trace files:
- /u01/app/oracle/diag/rdbms/cdb12102/cdb12102/trace/cdb12102_ora_14814_IOTPK.trc
- Leaf block DUMP
- ===============
- header address 140336316215908=0x7fa29846f264
- kdxcolev 0
- KDXCOLEV Flags = - - -
- kdxcolok 0
- kdxcoopc 0x90: opcode=0: iot flags=I-- is converted=Y
- kdxconco 2
- kdxcosdc 0
- kdxconro 1
- kdxcofbo 38=0x26
- kdxcofeo 8006=0x1f46
- kdxcoavs 7968
- kdxlespl 0
- kdxlende 0
- kdxlenxt 0=0x0
- kdxleprv 0=0x0
- kdxledsz 0
- kdxlebksz 8032
- Here are PRIMARY KEY VALUES 'IIII' AND 'QQQQ' AND non-KEY VALUE 'AAAA'
- ROW#0[8006] flag: K------, lock: 2, len=26
- col 0; len 4; (4): 49 49 49 49
- col 1; len 4; (4): 51 51 51 51
- tl: 14 fb: --H-F--- lb: 0x0 cc: 1
- nrid: 0x08800085.0
- col 0: [ 4] 41 41 41 41
- ----- end of leaf block Logical dump -----
- /u01/app/oracle/diag/rdbms/cdb12102/cdb12102/trace/cdb12102_ora_14814_IOTOVERFLOW.trc
- Here IS overflow VALUE 'BBBB' AND in-ROW LOB VALUE 'LLLL':
- block_row_dump:
- tab 0, ROW 0, @0x1f69
- tl: 47 fb: -----L-- lb: 0x1 cc: 2
- col 0: [ 4] 42 42 42 42
- col 1: [38]
- 00 54 00 01 02 0c 80 80 00 02 00 00 00 01 00 00 00 1a 6a b3 00 12 48 90 00
- 0c 00 00 08 01 00 4c 00 4c 00 4c 00 4c
- LOB
- Locator:
- LENGTH: 84(38)
- Version: 1
- Byte LENGTH: 2
- LobID: 00.00.00.01.00.00.00.1a.6a.b3
- Flags[ 0x02 0x0c 0x80 0x80 ]:
- TYPE: CLOB
- Storage: SecureFile
- Characterset Format: IMPLICIT
- Partitioned TABLE: No
- Options: VaringWidthReadWrite
- SecureFile Header:
- LENGTH: 18
- Old Flag: 0x48 [ DataInRow SecureFile ]
- Flag 0: 0x90 [ INODE Valid ]
- Layers:
- Lengths ARRAY: INODE:12
- INODE:
- 00 00 08 01 00 4c 00 4c 00 4c 00 4c
- end_of_block_dump
Add Comment
Please, Sign In to add comment