This is the third page in a series investigating XML DB.
In order to store an XML document in database objects (as opposed to LOBs) the document must have an XML schema. See XML DB - Introduction for more information about the XML Schema and also the example on which these pages are based.
There are two ways of storing array data in XML DB; using a VARRAY and using a nested table. XML DB - VARRAY Storage covers creation of an XML schema called schema1.xsd which uses VARRAY storage for arrays. This page discusses use of nested table storage with XML documents using an XML schema called schema2.xsd which uses nested tables to store arrays.
The default storage option can be specified using the xdb:storeVarrayAsTable attribute in the header. This is "false" for VARRAY and "true" for nested tables.
We can specify the name of the table in which the document will be stored. For example to store the document in a table called ROUTE2 we specify xdb:defaultTable="ROUTE2" in the definition for the "route" element
The XML schema is defined as follows:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="true"> <xs:element name="route" xdb:defaultTable="ROUTE2"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="centre" type="xs:string"/> <xs:element name="zoom" type="xs:byte"/> <xs:element name="line"> <xs:complexType> <xs:sequence> <xs:element name="point" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:byte"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The above schema is stored in /home/oracle/xdb/schema2.xsd. It specifies that the points array will be stored in a nested table and that the main table will be called ROUTE2
The XML schema can be loaded into the database using the following command:
BEGIN dbms_xmlschema.registerSchema ( schemaurl => '/route/schema/schema2.xsd', schemadoc => bfilename ('XDBDIR','schema2.xsd'), local => TRUE, gentypes => TRUE, genbean => FALSE, gentables => TRUE ); END; /
When the XML schema is loaded successfully, the underlying tables and indexes are created including the ROUTE2 table.
The ROUTE2 table will initially be empty:
SQL> SELECT COUNT(*) FROM route2; COUNT(*) ---------- 0
The following XML document will be loaded into the database (/home/oracle/xdb/a21.xml):
<?xml version="1.0"?> <route xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/route/schema/schema2.xsd"> <title>Great Orme Tramway</title> <centre>53.328387,-3.839557</centre> <zoom>16</zoom> <line id="1"> <point>53.32724,-3.835605</point> <point>53.327511,-3.835986</point> <point>53.327777,-3.836697</point> <point>53.328046,-3.837305</point> <point>53.328339,-3.837928</point> <point>53.328425,-3.83822</point> <point>53.328626,-3.838598</point> <point>53.328677,-3.838783</point> <point>53.328669,-3.839604</point> <point>53.328667,-3.840342</point> <point>53.328744,-3.841262</point> <point>53.328768,-3.841398</point> <point>53.328949,-3.842007</point> <point>53.329026,-3.842104</point> <point>53.329113,-3.842144</point> <point>53.329946,-3.842141</point> <point>53.330179,-3.842125</point> <point>53.330296,-3.842209</point> <point>53.33038,-3.842353</point> <point>53.330423,-3.842549</point> <point>53.330588,-3.843512</point> </line> </route>
In the above example, the route element has been extended to include the XSI namespace and the schema2.xsd XML schema.
The XML document can be loaded into the database using the following:
DECLARE res BOOLEAN; BEGIN res := dbms_xdb.createResource ( abspath => '/route/data/route2.xml', data => bfilename ('XDBDIR','a21.xml'), csid => nls_charset_id ('AL32UTF8') ); END; /
In this case the source document is a21.xml and the target is route1.xml.
After the document has been loaded, the ROUTE2 table will contain one row:
SQL> SELECT COUNT(*) FROM route2; COUNT(*) ---------- 1
We can select the contents of the ROUTE2 table (Nested Tables) using:
SET PAGESIZE 1000 SET LONG 100000 SQL> SELECT * FROM route2; SYS_NC_ROWINFO$ --------------------------------------------------------------------------- <?xml version="1.0"?> <route xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSche maLocation="/route/schema/schema2.xsd"> <title>Great Orme Tramway</title> <centre>53.328387,-3.839557</centre> <zoom>16</zoom> <line id="1"> <point>53.32724,-3.835605</point> <point>53.327511,-3.835986</point> <point>53.327777,-3.836697</point> <point>53.328046,-3.837305</point> <point>53.328339,-3.837928</point> <point>53.328425,-3.83822</point> <point>53.328626,-3.838598</point> <point>53.328677,-3.838783</point> <point>53.328669,-3.839604</point> <point>53.328667,-3.840342</point> <point>53.328744,-3.841262</point> <point>53.328768,-3.841398</point> <point>53.328949,-3.842007</point> <point>53.329026,-3.842104</point> <point>53.329113,-3.842144</point> <point>53.329946,-3.842141</point> <point>53.330179,-3.842125</point> <point>53.330296,-3.842209</point> <point>53.33038,-3.842353</point> <point>53.330423,-3.842549</point> <point>53.330588,-3.843512</point> </line> </route>
Oracle returns the same results irrespective of whether the points array is stored in a VARRAY or a nested table.
ROUTE2 is an object table of XMLType.
SQL> DESC route2 Name Null? Type ----------------------------------------- -------- ------------------------ TABLE of SYS.XMLTYPE(XMLSchema "/route/schema/schema2.xsd" Element "route") STORAGE Object-relational TYPE "route907_T"
The table is based on the "route907_T" type. Note that the type name is case-sensitive, so all references must be enclosed in double quotes.
SQL> DESC "route907_T" Name Null? Type ----------------------------------------- -------- ------------------------ SYS_XDBPD$ XDB.XDB$RAW_LIST_T title VARCHAR2(4000 CHAR) centre VARCHAR2(4000 CHAR) zoom NUMBER(3) line line908_T
A sub type called "line908_T" has been created for the lines
SQL> DESC "line908_T" Name Null? Type ----------------------------------------- -------- ------------------------ SYS_XDBPD$ XDB.XDB$RAW_LIST_T id NUMBER(3) point point909_COLL
Finally a collection type called "point909.col" has been created for the points.
SQL> DESC "point909_COLL" "point909_COLL" VARRAY(2147483647) OF VARCHAR2(4000 CHAR)
The following table summarizes objects created to support the XML schema:
SELECT object_id,object_name,object_type FROM dba_objects ORDER BY object_id;
OBJECT_ID | OBJECT_NAME | OBJECT_TYPE |
---|---|---|
79132 | point909_COLL | TYPE |
79133 | line908_T | TYPE |
79134 | route907_T | TYPE |
79135 | ROUTE2 | TABLE |
79136 | SYS_NT4424qFrYL5LgQ2UFqMBruA== | TABLE |
79137 | SYS_C0011635 | INDEX |
79138 | NAMESPACES913_L | LOB |
79139 | SYS_IL0000079135C00004$$ | INDEX |
79140 | EXTRADATA912_L | LOB |
79141 | SYS_IL0000079135C00005$$ | INDEX |
79142 | SYS_XDBPD$910_L | LOB |
79143 | SYS_IL0000079135C00007$$ | INDEX |
79144 | SYS_XDBPD$911_L | LOB |
79145 | SYS_IL0000079135C00011$$ | INDEX |
79146 | SYS_C0011636 | INDEX |
79147 | SYS_C0011637 | INDEX |
79148 | XD4424qFq6L5LgQ2UFqMBruA== | XML SCHEMA |
In this example, the points are stored in a Nested Table
The objects created to support schema2.xsd are significantly different from those created for schema1.xsd.
In particular two tables have been created, ROUTE2 and a nested table with a system-generated name: SYS_NT4424qFrYL5LgQ2UFqMBruA==.
Also note that the LOB columns have a different naming convention for this XML schema.
We can investigate the nested table further. The DESCRIBE command reports the following:
SQL> DESC "SYS_NT4424qFrYL5LgQ2UFqMBruA==" Name Null? Type ----------------------------------------- -------- ------------------------ COLUMN_VALUE VARCHAR2(4000 CHAR)
We cannot directly select the contents of the nested table:
SQL> SELECT * FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA=="; SELECT * FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA==" * ERROR at line 1: ORA-22812: cannot reference nested table column's storage table
However, we can use the NESTED_TABLE_GET_REFS hint to inspect the contents of the nested table. For example:
SQL> SELECT /*+ NESTED_TABLE_GET_REFS */ * 2 FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA=="; COLUMN_VALUE ---------------------------------------------------------------------------- 53.32724,-3.835605 53.327511,-3.835986 53.327777,-3.836697 53.328046,-3.837305 53.328339,-3.837928 53.328425,-3.83822 53.328626,-3.838598 53.328677,-3.838783 53.328669,-3.839604 53.328667,-3.840342 53.328744,-3.841262 53.328768,-3.841398 53.328949,-3.842007 53.329026,-3.842104 53.329113,-3.842144 53.329946,-3.842141 53.330179,-3.842125 53.330296,-3.842209 53.33038,-3.842353 53.330423,-3.842549 53.330588,-3.843512 21 rows selected.
DBA_TAB_COLUMNS only reports a single column for the ROUTE2 table.
SELECT column_id,column_name,data_type FROM dba_tab_columns WHERE table_name = 'ROUTE2' ORDER BY column_id;
COLUMN_ID | COLUMN_NAME | DATA_TYPE |
---|---|---|
1 | SYS_NC_ROWINFO$ | XMLTYPE |
The underlying COL$ table reports additional columns for ROUTE2:
SELECT col#,intcol#,segcol#,name,type# FROM sys.col$ WHERE obj# = 79119 ORDER BY intcol#;
COL# | INTCOL# | SEGCOL# | NAME | TYPE# |
---|---|---|---|---|
0 | 1 | 1 | SYS_NC_OID$ | 23 |
1 | 2 | 0 | SYS_NC_ROWINFO$ | 58 |
1 | 3 | 2 | XMLEXTRA | 121 |
1 | 4 | 3 | SYS_NC00004$ | 123 |
1 | 5 | 4 | SYS_NC00005$ | 123 |
1 | 6 | 5 | XMLDATA | 121 |
1 | 7 | 6 | SYS_NC00007$ | 123 |
1 | 8 | 7 | SYS_NC00008$ | 1 |
1 | 9 | 8 | SYS_NC00009$ | 1 |
1 | 10 | 9 | SYS_NC00010$ | 2 |
1 | 11 | 10 | SYS_NC00011$ | 123 |
1 | 12 | 11 | SYS_NC00012$ | 2 |
1 | 13 | 0 | SYS_NC00013$ | 123 |
1 | 14 | 12 | SYS_NC0001300014$ | 23 |
0 | 15 | 13 | ACLOID | 23 |
0 | 16 | 14 | OWNERID | 23 |
The main difference is the additional column (internal column 14) which has the system generated name SYS_NC0001300014$
The following statement reports the file number and block number of the row in ROUTE2:
SELECT dbms_rowid.rowid_relative_fno (rowid) AS fileno, dbms_rowid.rowid_block_number (rowid) AS blockno FROM route2; FILENO BLOCKNO ---------- ---------- 4 6591 SQL> ALTER SYSTEM DUMP DATAFILE 4 BLOCK 6591; System altered.
The block dump is as follows:
Block header dump: 0x010019bf Object id on Block? Y seg/obj: 0x1351f csc: 0x00.369805 itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x10019b8 ver: 0x01 opc: 0 inc: 0 exflg: 0 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0006.011.0000072e 0x00c0035b.0461.48 --U- 1 fsc 0x0000.0036980c 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 bdba: 0x010019bf data_block_dump,data header at 0x7f079d378064 =============== tsiz: 0x1f98 hsiz: 0x14 pbl: 0x7f079d378064 76543210 flag=-------- ntab=1 nrow=1 frre=-1 fsbo=0x14 fseo=0x1e77 avsp=0x1e63 tosp=0x1e63 0xe:pti[0] nrow=1 offs=0 0x12:pri[0] offs=0x1e77 block_row_dump: tab 0, row 0, @0x1e77 tl: 289 fb: --H-FL-- lb: 0x1 cc: 14 col 0: [16] e3 8d dd 12 9c ae 2f ed e0 43 65 05 a8 c0 b4 73 col 1: [ 1] 00 col 2: [68] 80 88 01 fe 00 00 00 43 03 11 00 01 00 fe 00 00 00 01 31 50 00 03 78 73 69 00 29 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 32 30 30 31 2f 58 4d 4c 53 63 68 65 6d 61 2d 69 6e 73 74 61 6e 63 65 col 3: [23] 80 88 01 fe 00 00 00 16 03 11 00 01 00 fe 00 00 00 01 04 56 31 2e 30 col 4: [ 1] 00 col 5: [59] 80 88 01 fe 00 00 00 3a 03 11 00 01 00 fe 00 00 00 01 28 13 0f 02 00 84 00 00 88 01 00 19 2f 72 6f 75 74 65 2f 73 63 68 65 6d 61 2f 73 63 68 65 6d 61 32 2e 78 73 64 00 01 02 03 col 6: [18] 47 72 65 61 74 20 4f 72 6d 65 20 54 72 61 6d 77 61 79 col 7: [19] 35 33 2e 33 32 38 33 38 37 2c 2d 33 2e 38 33 39 35 35 37 col 8: [ 2] c1 11 col 9: [27] 80 88 01 fe 00 00 00 1a 03 11 00 01 00 fe 00 00 00 01 08 13 03 00 00 01 80 80 15 col 10: [ 2] c1 02 col 11: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 12: [16] ad 27 3a e4 53 11 06 c9 e0 43 1e 4e e5 0a eb f2 col 13: [ 4] 00 00 00 59 end_of_block_dump End dump data blocks tsn: 4 file#: 4 minblk 6591 maxblk 6591
In this example, the points data is stored in a separate nested table.
We can determine the file number and block number of the rows in the nested table using the following statement:
SELECT /*+ NESTED_TABLE_GET_REFS */ DISTINCT dbms_rowid.rowid_relative_fno (rowid) AS fileno, dbms_rowid.rowid_block_number (rowid) AS blockno FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA=="; FILENO BLOCKNO ---------- ---------- 4 6575
We can dump the block using:
SQL> ALTER SYSTEM DUMP DATAFILE 4 BLOCK 6575; System altered.
Block header dump: 0x010019af Object id on Block? Y seg/obj: 0x13520 csc: 0x00.369804 itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x10019a8 ver: 0x01 opc: 0 inc: 0 exflg: 0 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0006.011.0000072e 0x00c0035b.0461.46 --U- 21 fsc 0x0000.0036980c 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 bdba: 0x010019af data_block_dump,data header at 0x7f8778e71a64 =============== tsiz: 0x1f98 hsiz: 0x3c pbl: 0x7f8778e71a64 76543210 flag=-------- ntab=1 nrow=21 frre=-1 fsbo=0x3c fseo=0x1c14 avsp=0x1bd8 tosp=0x1bd8 0xe:pti[0] nrow=21 offs=0 0x12:pri[0] offs=0x1f6e 0x14:pri[1] offs=0x1f43 0x16:pri[2] offs=0x1f18 0x18:pri[3] offs=0x1eed 0x1a:pri[4] offs=0x1ec2 0x1c:pri[5] offs=0x1e98 0x1e:pri[6] offs=0x1e6d 0x20:pri[7] offs=0x1e42 0x22:pri[8] offs=0x1e17 0x24:pri[9] offs=0x1dec 0x26:pri[10] offs=0x1dc1 0x28:pri[11] offs=0x1d96 0x2a:pri[12] offs=0x1d6b 0x2c:pri[13] offs=0x1d40 0x2e:pri[14] offs=0x1d15 0x30:pri[15] offs=0x1cea 0x32:pri[16] offs=0x1cbf 0x34:pri[17] offs=0x1c94 0x36:pri[18] offs=0x1c6a 0x38:pri[19] offs=0x1c3f 0x3a:pri[20] offs=0x1c14 block_row_dump: tab 0, row 0, @0x1f6e tl: 42 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 02 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [18] 35 33 2e 33 32 37 32 34 2c 2d 33 2e 38 33 35 36 30 35 tab 0, row 1, @0x1f43 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 03 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 37 35 31 31 2c 2d 33 2e 38 33 35 39 38 36 tab 0, row 2, @0x1f18 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 04 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 37 37 37 37 2c 2d 33 2e 38 33 36 36 39 37 tab 0, row 3, @0x1eed tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 05 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 30 34 36 2c 2d 33 2e 38 33 37 33 30 35 tab 0, row 4, @0x1ec2 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 06 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 33 33 39 2c 2d 33 2e 38 33 37 39 32 38 tab 0, row 5, @0x1e98 tl: 42 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 07 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [18] 35 33 2e 33 32 38 34 32 35 2c 2d 33 2e 38 33 38 32 32 tab 0, row 6, @0x1e6d tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 08 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 36 32 36 2c 2d 33 2e 38 33 38 35 39 38 tab 0, row 7, @0x1e42 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 09 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 36 37 37 2c 2d 33 2e 38 33 38 37 38 33 tab 0, row 8, @0x1e17 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 0a col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 36 36 39 2c 2d 33 2e 38 33 39 36 30 34 tab 0, row 9, @0x1dec tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 0b col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 36 36 37 2c 2d 33 2e 38 34 30 33 34 32 tab 0, row 10, @0x1dc1 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 0c col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 37 34 34 2c 2d 33 2e 38 34 31 32 36 32 tab 0, row 11, @0x1d96 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 0d col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 37 36 38 2c 2d 33 2e 38 34 31 33 39 38 tab 0, row 12, @0x1d6b tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 0e col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 38 39 34 39 2c 2d 33 2e 38 34 32 30 30 37 tab 0, row 13, @0x1d40 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 0f col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 39 30 32 36 2c 2d 33 2e 38 34 32 31 30 34 tab 0, row 14, @0x1d15 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 10 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 39 31 31 33 2c 2d 33 2e 38 34 32 31 34 34 tab 0, row 15, @0x1cea tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 11 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 32 39 39 34 36 2c 2d 33 2e 38 34 32 31 34 31 tab 0, row 16, @0x1cbf tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 12 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 33 30 31 37 39 2c 2d 33 2e 38 34 32 31 32 35 tab 0, row 17, @0x1c94 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 13 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 33 30 32 39 36 2c 2d 33 2e 38 34 32 32 30 39 tab 0, row 18, @0x1c6a tl: 42 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 14 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [18] 35 33 2e 33 33 30 33 38 2c 2d 33 2e 38 34 32 33 35 33 tab 0, row 19, @0x1c3f tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 15 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 33 30 34 32 33 2c 2d 33 2e 38 34 32 35 34 39 tab 0, row 20, @0x1c14 tl: 43 fb: --H-FL-- lb: 0x1 cc: 3 col 0: [ 2] c1 16 col 1: [16] e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73 col 2: [19] 35 33 2e 33 33 30 35 38 38 2c 2d 33 2e 38 34 33 35 31 32 end_of_block_dump End dump data blocks tsn: 4 file#: 4 minblk 6575 maxblk 6575