Oracle  extent 的扩展原理与内部结构解析

-------------------------   LSLIANG      PCONLINE.COM.CN

先建立测试环境 (sunos  solaris  sparc  10 , oracle  10.2.0.3 ,sun v890 )

LSLIANG  at sunha5 > create tablespace lsl datafile '/oracle/oradata/sunha5/test.dbf' size 10m;

Tablespace created.

LSLIANG  at sunha5 > alter user lsliang default tablespace lsl;

User altered.

LSLIANG  at sunha5 > create table test(id number ,name varchar2(100) );

Table created.

LSLIANG  at sunha5 > select * from  dba_extents where owner='LSLIANG';

OWNER

------------------------------

SEGMENT_NAME

--------------------------------------------------------------------------------

PARTITION_NAME                 SEGMENT_TYPE       TABLESPACE_NAME

------------------------------ ------------------ ------------------------------

EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO

---------- ---------- ---------- ---------- ---------- ------------

LSLIANG

TEST

TABLE              LSL

0         46          9      65536          8           46

LSLIANG  at sunha5 > alter system dump datafile 46 block 9 ;

System altered.

LSLIANG  at sunha5 > alter system dump datafile 46 block 10 ;

System altered.

LSLIANG  at sunha5 > alter system  dump datafile 46 block 11 ;

System altered.

LSLIANG  at sunha5 > alter system dump datafile 46 block 12 ;

System altered.

LSLIANG  at sunha5 >

Trace  file

Start dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9

buffer tsn: 22 rdba: 0x0b800009 (46/9)

scn: 0x0001.000ee871 seq: 0x01 flg: 0x00 tail: 0xe8712001标准数据块头(20bytes)

frmt: 0x02 chkval: 0x0000 type: 0x20=FIRST LEVEL BITMAP BLOCK      /* 块类型:一级位图块*/

Hex dump of block: st=0, typ_found=1

Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00

FFFFFFFF7A01FE0020A20000 0B800009 000EE871 00010100[ ..........q....]/* standard  block head 20bytes*/

FFFFFFFF7A01FE100000000000000000 00000000 00000000  [................]

Repeat 2 times

FFFFFFFF7A01FE40 00000000 00000000 00000000 04000000  [................]

FFFFFFFF7A01FE50FFFFFFFF00000005 00000003 00000008  [................]

FFFFFFFF7A01FE60 01000001 00000000 00000000 00000000  [................]

FFFFFFFF7A01FE70 00000000 00000003 00000000 00000000  [................]

FFFFFFFF7A01FE80 00000000 00000000 00000000 00000000  [................]

FFFFFFFF7A01FE900B80000A00000000 00000000 00000003  [................]/  *dump 出这些数据块的结构的,因为还没有实际的数据,所以我们还不能

FFFFFFFF7A01FEA0 000000080B80000C00000000 00000000  [................]确定这些结构的内容和他们代表的意思 ,继续向下看 */

FFFFFFFF7A01FEB0 00000000 00000000 00000000 00000001  [................]

FFFFFFFF7A01FEC0 000102FF 00000000 000000000B800009[................]

FFFFFFFF7A01FED00000000800000000 00000000 00000000  [................]

FFFFFFFF7A01FEE0 00000000 00000000 00000000 00000000  [................]

Repeat 9 times

FFFFFFFF7A01FF80 00000000 00000000 00000000 11100000  [................]

FFFFFFFF7A01FF90 00000000 00000000 00000000 00000000  [................]

Repeat 485 times

FFFFFFFF7A021DF0 00000000 00000000 00000000 E8712001  [.............q .]

Dump of First Level Bitmap Block

--------------------------------

nbits : 4 nranges: 1         parent dba:  0x0b80000a   poffset: 0

unformatted: 5       total: 8         first useful block: 3

owning instance : 1

instance ownership changed at

Last successful Search

Freeness Status:  nf1 0      nf2 0      nf3 0      nf4 0

Extent Map Block Offset: 4294967295

First free datablock : 3

Bitmap block lock opcode 0

Locker xid:     :  0x0000.000.00000000

Inc #: 0 Objd: 66303/*object_id 对应于dba_object表的object_id */

HWM Flag: HWM Set/* 高水平线hwm  */

Highwater::  0x0b80000c  ext#: 0      blk#: 3      ext size: 8

#blocks in seg. hdr's freelists: 0

#blocks below: 0

mapblk  0x00000000  offset: 0

--------------------------------------------------------

DBA Ranges :

--------------------------------------------------------

0x0b800009  Length: 8      Offset: 0

0:Metadata   1:Metadata   2:Metadata   3:unformatted

4:unformatted   5:unformatted   6:unformatted   7:unformatted

--------------------------------------------------------

End dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9

*** 2008-06-07 14:46:14.129

Start dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10

buffer tsn: 22 rdba: 0x0b80000a (46/10)

scn: 0x0001.000ee870 seq: 0x01 flg: 0x00 tail: 0xe8702101

frmt: 0x02 chkval: 0x0000 type: 0x21=SECOND LEVEL BITMAP BLOCK

Hex dump of block: st=0, typ_found=1

Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00

FFFFFFFF7A01FE00 21A20000 0B80000A 000EE870 00010100  [!..........p....]/* 这里似乎也看不出什么东西出来。不用急,继续向下看*/

FFFFFFFF7A01FE10 00000000 00000000 00000000 00000000  [................]

Repeat 2 times

FFFFFFFF7A01FE40 00000000 00000000 000000000B80000B[................]

FFFFFFFF7A01FE50 00000001 00000001 00000000 00000000  [................]

FFFFFFFF7A01FE60 00000000 00000000000102FF00000001  [................]/ * object_id */

FFFFFFFF7A01FE70 00000000 0B800009 05000001 00000000  [................]

FFFFFFFF7A01FE80 00000000 00000000 00000000 00000000  [................]

Repeat 502 times

FFFFFFFF7A021DF0 00000000 00000000 00000000 E8702101  [.............p!.]

Dump of Second Level Bitmap Block

number: 1       nfree: 1       ffree: 0      pdba:     0x0b80000b

Inc #: 0 Objd: 66303

opcode:0

xid:

L1 Ranges :

--------------------------------------------------------

0x0b800009  Free: 5 Inst: 1

--------------------------------------------------------

End dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10

*** 2008-06-07 14:46:30.471

Start dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11

buffer tsn: 22 rdba: 0x0b80000b (46/11)

scn: 0x0001.000ee871 seq: 0x01 flg: 0x00 tail: 0xe8712301/* standard  block head */

frmt: 0x02 chkval: 0x0000 type: 0x23=PAGETABLE SEGMENT HEADER/* 块类型:segment head (段头 或者说是表头)*/

Hex dump of block: st=0, typ_found=1

Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00

FFFFFFFF7A01FE00 23A20000 0B80000B 000EE871 00010100  [#..........q....]

FFFFFFFF7A01FE10 00000000 00000000 00000000 00000000  [................]

FFFFFFFF7A01FE20 00000000 00000001 00000008 0A9C0000  [................]

FFFFFFFF7A01FE30 00000000 00000003 00000008 0B80000C  [................]

FFFFFFFF7A01FE40 00000000 00000000 00000000 00000000  [................]

Repeat 1 times

FFFFFFFF7A01FE60 00000003 00000008 0B80000C 00000000  [................]

FFFFFFFF7A01FE70 00000000 00000000 00000000 0B800009  [................]

FFFFFFFF7A01FE80 0B800009 00000000 00000000 00000000  [................]

FFFFFFFF7A01FE90 00000000 00000000 00000000 00000000  [................]

Repeat 3 times

FFFFFFFF7A01FED0 00010000 00002000 00000000 00001434  [...... ........4]

FFFFFFFF7A01FEE0 00000000 0B80000A 00000001 0B800009  [................]

FFFFFFFF7A01FEF0 0B80000A 00000000 00000000 00000000  [................]

FFFFFFFF7A01FF00 00000000 00000000 00000001 00000000  [................]

FFFFFFFF7A01FF10 000102FF 10000000 0B800009 00000008  [................]

FFFFFFFF7A01FF20 00000000 00000000 00000000 00000000  [................]

Repeat 152 times

FFFFFFFF7A0208B0 0B800009 0B80000C 00000000 00000000  [................]

FFFFFFFF7A0208C0 00000000 00000000 00000000 00000000  [................]

Repeat 151 times

FFFFFFFF7A021240 00000000 00000000 0B80000A 00000000  [................]

FFFFFFFF7A021250 00000000 00000000 00000000 00000000  [................]

Repeat 185 times

FFFFFFFF7A021DF0 00000000 00000000 00000000 E8712301  [.............q#.]

Extent Control Header

-----------------------------------------------------------------

Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 8

last map  0x00000000  #maps: 0      offset: 2716

Highwater::  0x0b80000c  ext#: 0      blk#: 3      ext size: 8

#blocks in seg. hdr's freelists: 0

#blocks below: 0

mapblk  0x00000000  offset: 0

Unlocked

--------------------------------------------------------

Low HighWater Mark :/  * 字面意思看起来是高水平线  继续向下看* /

Highwater::  0x0b80000c  ext#: 0      blk#: 3      ext size: 8

#blocks in seg. hdr's freelists: 0

#blocks below: 0

mapblk  0x00000000  offset: 0

Level 1 BMB for High HWM block: 0x0b800009/* 这里的hight就是我们的高水平线了,

Level 1 BMB for Low HWM block: 0x0b800009low 的意思什么? 我也不知道,向下继续看。*/

--------------------------------------------------------

Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0

L2 Array start offset:  0x00001434

First Level 3 BMB:  0x00000000

L2 Hint for inserts:  0x0b80000a

Last Level 1 BMB:  0x0b800009

Last Level II BMB:  0x0b80000a/* 还有3级位图块 ??? 看起来象哦,至少目前中国大陆正在跑的oracle数据库中还没有出现过这个类型的块

Last Level III BMB:  0x00000000oracle 考虑的够远的,连未来都考虑到里面去了 ,厉害*/

Map Header:: next  0x00000000  #extents: 1    obj#: 66303  flag: 0x10000000

Inc # 0

Extent Map/这里记录了 这个段(表)的extent的map(地图?) 其实就是地址(RDBA) 了

-----------------------------------------------------------------也就是说,我只要知道了这个段头(表的第一个数据块,似乎也不对,就先这样了),我们就知道了这个表开始的地方了,

0x0b800009  length: 8既然段是 有extent组成的,那么我们知道了这个地图,我们就知道了这个段的所有的extent了??(这个可以向下看稍候

再说) 里面记录了这个段,由一个extent组成,长度/大小是8个数据块(block) */

Auxillary Map

--------------------------------------------------------

Auxillary Map

--------------------------------------------------------

Extent 0     :  L1 dba:  0x0b800009 Data dba:  0x0b80000c

--------------------------------------------------------

Second Level Bitmap block DBAs

--------------------------------------------------------

DBA 1:   0x0b80000a

End dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11

*** 2008-06-07 14:46:40.860

Start dump data blocks tsn: 22 file#: 46 minblk 12 maxblk 12

buffer tsn: 22 rdba: 0x0000000c (0/12)

scn: 0x0000.00000000 seq: 0x01 flg: 0x05 tail: 0x00000001/* standard  block head */

frmt: 0x02 chkval: 0x01aa type: 0x00=unknown/块类型:unknow */

Hex dump of corrupt header 4 = CORRUPT

Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A01FE14/ *  这是因为我们还没有向表里写数据,所以这些块还没有使用

FFFFFFFF7A01FE00 00A20000 0000000C 00000000 00000105  [...........自然也不知道将来会分给什么官给他做

FFFFFFFF7A01FE10 01AA0000                             [....]所以unknow的意思应该是储备干部*/

Hex dump of block: st=4, typ_found=0

Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00

FFFFFFFF7A01FE00 00A20000 0000000C 00000000 00000105  [................]

FFFFFFFF7A01FE10 01AA0000 00000000 00000000 00000000  [................]

FFFFFFFF7A01FE20 00000000 00000000 00000000 00000000  [................]

Repeat 508 times

现在数据文件中只建立一个表,还没有插入数据,所以 BLOCK 12的TYPE=0X00=unknow .

所以我们还不能确认这些内容到底代表什么。

现在插入数据:

LSLIANG  at sunha5 > insert into test (id ,name ) select object_id , owner from dba_objects ;

55056 rows created.

LSLIANG  at sunha5 > commit;

Commit complete.

LSLIANG  at sunha5 > alter system checkpoint;

System altered.

LSLIANG  at sunha5 > alter system dump datafile 46  block 9 ;

System altered.

LSLIANG  at sunha5 > alter system dump datafile 46 block 10 ;

System altered.

LSLIANG  at sunha5 > alter system dump datafile 46 block 11 ;

System altered.

LSLIANG  at sunha5 > alter system dump datafile 46 block 12 ;

System altered.

再来看看这几个块有什么变化:

Trace file  ;

Start dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9

buffer tsn: 22 rdba: 0x0b800009 (46/9)

scn: 0x0001.000f2d01 seq: 0x02 flg: 0x04 tail: 0x2d012002/* standard  block head */

frmt: 0x02 chkval: 0x0645 type: 0x20=FIRST LEVEL BITMAP BLOCK    /* 块类型: 一级位图块*/

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0000000106768C00 to 0x000000010676AC00

106768C0020A20000 0B800009 000F2D01 00010204[ .........-.....]/* standard  block head  */

106768C100645000000000000 00000000 00000000  [.E..............]

106768C20 00000000 00000000 00000000 00000000  [................]

Repeat 1 times

106768C40 00000000 00000000 0000000004000000  [................]/*nbits =4*/

106768C50 FFFFFFFF000000000000000300000010[................] /00000000:unformatted: 0=0x0*03first useful block10total 16=0x10

106768C600200000100000000 00000000 00000000[................]  /*02代表nranges: 2 ;01owning instance : 1

106768C700000000000000010484A37F4 484A37F4[........HJ7.HJ7.]/00000010First free datablock : 16=ox10 ;484A37F4 484A37F4时间标记  */

106768C8000000000 00000000 00000000 00000000[................]/* 分别代表Bitmap block lock opcode 0Locker xid:     :  0x0000.000.00000000Inc #: 0*/

106768C900B80000A00000000 00000000 00000000  [................] /*0B80000Aparent dba:  0x0b80000a  level 2 block */

106768CA0 00000000 00000000 00000000 00000000  [................]

Repeat 1 times

106768CC0000102FF00000000 000000000B800009[................]/*000102FFInc #: 0 Objd: 66303 =dba_object表的object_id*/

106768CD000000008 00000000 0B800011 00000008[................]/这部分是代表这个extent的范围:起点=rdba  blk数量,偏移量*/

106768CE00000000800000000 00000000 00000000  [................]

106768CF0 00000000 00000000 00000000 00000000  [................]

Repeat 8 times

106768D80 00000000 00000000 0000000011111111[................]/* 16个1表示full5: 75-100%free , 4:50-75%free  3: 25-50%fred, 2:0-25%fredd  1:full ,*/

106768D901111111100000000 00000000 00000000  [................]

106768DA0 00000000 00000000 00000000 00000000  [................]

Repeat 484 times

10676ABF0 00000000 00000000 000000002D012002[............-. .]/*tail 每个块都有的一个版本验证结构如果我们在做dml的时候报错了,说是某个块损坏,基本就是这里验

Dump of First Level Bitmap Block证出问题了,他的组成是是有block head里的scn: 0x0001.000f2d01的后两位0x2d01和块类型type=0x20

--------------------------------还有seq: 0x02组成的。*/

nbits : 4 nranges: 2         parent dba:  0x0b80000a   poffset: 0

unformatted: 0       total: 16        first useful block: 3

owning instance : 1

instance ownership changed at 06/07/2008 15:25:40

Last successful Search 06/07/2008 15:25:40

Freeness Status:  nf1 0      nf2 0      nf3 0      nf4 0

106768C600200000100000000 00000000 00000000[................]/*紫色部分 分别代表nf1 0      nf2 0      nf3 0      nf4 0使用率的统计*/

106768C700000000000000010484A37F4 484A37F4[........HJ7.HJ7.]

106768C60 0100000100000000 00000001 00000000[................] /*下面这两行是我从一个没有添满的extent中截取的数据分别代表

106768C700000001A00000001 484DDFC1 484DDFC1Freeness Status:  nf1 0      nf2 1=0X01      nf3 0      nf4 26=0x1A*/

Extent Map Block Offset: 4294967295== 2^32 (2的32次幂)这个数据文件或这个段的一个最大值。

First free datablock : 16

Bitmap block lock opcode 0

Locker xid:     :  0x0000.000.00000000

Inc #: 0 Objd: 66303

--------------------------------------------------------

DBA Ranges :                                /* 这部分应该是我们最需要的,通过这个地方,我们可以知道我们想要的表的数据实际的存放空间。

--------------------------------------------------------这里记录了这个区(extent)所管理的数据块的范围,一个extent内的数据块一定是连续的,

0x0b800009  Length: 8      Offset: 0这个是有由oracl内核来保证的。所以我们只要解析出来object_id ,和这个范围就可以进入数据块直接读出数据

0x0b800011  Length: 8      Offset: 8而不用每个数据块都来扫描一边了。*/

0:Metadata   1:Metadata   2:Metadata   3:FULL/* 16个1表示full * /

4:FULL   5:FULL   6:FULL   7:FULL/* 16个1表示full5: 75-100%free , 4:50-75%free  3: 25-50%fred, 2:0-25%fredd  1:full ,*/

8:FULL   9:FULL   10:FULL   11:FULL

12:FULL   13:FULL   14:FULL   15:FULL

--------------------------------------------------------

End dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9

*** 2008-06-07 15:26:32.771

Start dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10

buffer tsn: 22 rdba: 0x0b80000a (46/10)

scn: 0x0001.000f2d59 seq: 0x01 flg: 0x04 tail: 0x2d592101/* standard block head */

frmt: 0x02 chkval: 0x0354 type: 0x21=SECOND LEVEL BITMAP BLOCK/*块类型:二级位图块*/

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0000000106768C00 to 0x000000010676AC00

106768C0021A20000 0B80000A 000F2D59 00010104[!.........-Y....]/*standard  block head 20bytes*/

106768C10 0354000000000000 00000000 00000000  [.T..............]

106768C20 00000000 00000000 00000000 00000000  [................]

Repeat 1 times

106768C40 00000000 00000000 000000000B80000B[................]/*pdba:     0x0b80000bsegment head */

106768C500000000A000000020000000800000000  [................]/*0000000A一级位图数组的大小,00000002nfree: 2第一个可用的block,00000008ffree: 8第一个具有空闲空间的extent*/

106768C60 00000000 00000000000102FF00000001  [................]/*object id 表示这个二级位图块是位于这个段内的*/

106768C70 00000000 0B800009 01000001 0B800019  [................]

106768C80 01000001 0B800029 01000001 0B800039  [.......).......9]

106768C90 01000001 0B800049 01000001 0B800059  [.......I.......Y]

106768CA0 01000001 0B800069 01000001 0B800079  [.......i.......y]

106768CB0 01000001 0B800089 05000001 0B80008A  [................]

106768CC0 05000001 00000000 00000000 00000000  [................]

106768CD0 00000000 00000000 00000000 00000000  [................]

Repeat 497 times

10676ABF0 00000000 00000000 00000000 2D592101  [............-Y!.]

Dump of Second Level Bitmap Block

number: 10      nfree: 2       ffree: 8      pdba:     0x0b80000b

Inc #: 0 Objd: 66303

opcode:0

xid: 0x0000.000.00000000

L1 Ranges :/这里需要解释下:level 2 bmb block的作用, 上面说了block 9只管理了9-25共16个数据块,

--------------------------------------------------------那么第17块以后的那些块怎么半呢,这就是level 2bmb block的作用了,2级位图块 记录了一级位图块的地址rdba0x0b800009  Free: 1 Inst: 1其实我们可以看看,或者猜测下,0x0b800009是第9块,9+16=25 = 0x19既0x0b800019

0x0b800019  Free: 1 Inst: 125 + 16 = 41=0x0b800029 第3个一级位图块。等等依次推下去,但是并不是所有的extent都只管理16个数据块,

0x0b800029  Free: 1 Inst: 1当数据量增长到一定成都的时候,每个位图块管理的数据块也会增长,并且是以几何倍数增长的。

0x0b800039  Free: 1 Inst: 1我们知道了第一个一级位图块和二级位图块,我门就可以知道所有的一级位图块的地址了,也就知道了这个段(对我们

0x0b800049  Free: 1 Inst: 1来说主要是表) 的所有的保存实际数据的数据块的地址了,读出里面的数据还会有很远了么??!!!*/

0x0b800059  Free: 1 Inst: 1

0x0b800069  Free: 1 Inst: 1

0x0b800079  Free: 1 Inst: 1

0x0b800089  Free: 5 Inst: 1

0x0b80008a  Free: 5 Inst: 1

--------------------------------------------------------

End dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10

*** 2008-06-07 15:26:44.223

Start dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11

buffer tsn: 22 rdba: 0x0b80000b (46/11)

scn: 0x0001.000f2d59 seq: 0x02 flg: 0x04 tail: 0x2d592302           /* standard  block head */

frmt: 0x02 chkval: 0x2e8b type: 0x23=PAGETABLE SEGMENT HEADER  /* 块类型 :segment head */

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0000000106768C00 to 0x000000010676AC00

106768C00 23A20000 0B80000B 000F2D59 00010204  [#.........-Y....]

106768C10 2E8B0000 00000000 0000000000000000[................]

106768C20 0000000000000011000001000A9C0000  [........]/*#extents: 17=0x11 #blocks: 256=0x1000A9Coffset: 2716=0X0A9C+ 20 extent  map的起始地址Auxillary Map*/

106768C300000001000000080000000800B800109[................]/*hight  Highwater:: 0x0b800109  ext#: 16=0X10 blk#: 128=0X80  ext size: 128=0X80*/

106768C40000000000000001000000000 000000F4[................]/*0000000000000010mapblk  0x00000000  offset: 16=0x10F4#blocks below: 244=0xF4 */

106768C50 00000000 00000000 000000000000000F[................]/* low  Highwater::  0x0b800089  ext#: 15     blk#: 8      ext size: 8 */

106768C6000000008 00000008 0B80008900000000[................] /*000000000000000Fmapblk  0x00000000  offset: 15=0x0f */

106768C700000000F00000000 000000760B800079[...........v...y]/*76#blocks below: 118=0x76在low高水平线下下面的数据块的数量0B800079low 高水平标志的块*/

106768C800B80008A00000000 00000000 00000000  [................]/*0B80008Ahight 高水平标志的数据块*/

106768C90 00000000 00000000 00000000 00000000  [................]

Repeat 3 times

106768CD0 00010000 00002000 0000000000001434[...... ........4]/*00001434二级位图extent数组的起始地址0x1434 + sizeof(blk_head)=20 =起始地址*/

106768CE0000000000B80000A000000010B80008A  [..........]

106768CF0 0B80000A 00000000 00000000 00000000  [................]

106768D00 00000000 00000000 00000011 00000000  [................]

106768D10000102FF100000000B800009 00000008  [................]/*000102FFobject_id */

106768D20 0B800011 00000008 0B800019 00000008  [................]

106768D30 0B800021 00000008 0B800029 00000008  [...!.......)....]/*这部分就是extent map拉 每个extent管理多少个block就在里面写了*/

106768D40 0B800031 00000008 0B800039 00000008  [...1.......9....]

106768D50 0B800041 00000008 0B800049 00000008  [...A.......I....]

106768D60 0B800051 00000008 0B800059 00000008  [...Q.......Y....]

106768D70 0B800061 00000008 0B800069 00000008  [...a.......i....]

106768D80 0B800071 00000008 0B800079 00000008  [...q.......y....]

106768D90 0B800081 00000008 0B800089 00000080[................]

106768DA0 00000000 00000000 00000000 00000000  [................]

Repeat 144 times

1067696B0 0B800009 0B80000C 0B800009 0B800011  [................]/* Auxillary Map 每个结构是8个字节 ,分别放置了level 1 bmb  block

1067696C0 0B800019 0B80001A 0B800019 0B800021  [...............!]和实际存放数据的数据块(type=0x06 trans  data) 的数据块的开始地址)而每个level 1块里都有记录

1067696D0 0B800029 0B80002A 0B800029 0B800031  [...)...*...)...1]他所管理的数据块的数量和偏移量,知道了这个就知道数据放在那里了*/

1067696E0 0B800039 0B80003A 0B800039 0B800041  [...9...:...9...A]

1067696F0 0B800049 0B80004A 0B800049 0B800051  [...I...J...I...Q]

106769700 0B800059 0B80005A 0B800059 0B800061  [...Y...Z...Y...a]

106769710 0B800069 0B80006A 0B800069 0B800071  [...i...j...i...q]

106769720 0B800079 0B80007A 0B800079 0B800081  [...y...z...y....]

106769730 0B800089 0B80008B 00000000 00000000  [................]

106769740 00000000 00000000 00000000 00000000  [................]

Repeat 143 times

10676A040 00000000 00000000 0B80000A 00000000  [................]

10676A050 00000000 00000000 00000000 00000000  [................]

Repeat 185 times

10676ABF0 00000000 00000000 00000000 2D592302  [............-Y#.]

Extent Control Header

-----------------------------------------------------------------

Extent Header:: spare1: 0      spare2: 0      #extents: 17     #blocks: 256

last map  0x00000000  #maps: 0      offset: 2716

Highwater::  0x0b800109  ext#: 16     blk#: 128ext size: 128/* 我们之前分派的extent都是8个block这个extent是128个

#blocks in seg. hdr's freelists: 0这个可以用select  * from dba_extents where owner='lsliang'and segmetn_name='test' l来察看下*/

#blocks below: 244/*hight 高水平线下有244个数据块(block )*/

mapblk  0x00000000  offset: 16

Unlocked

--------------------------------------------------------

Low HighWater Mark :/* low  高水平线的意思可以理解了吧,  就是extent被全部添满的地方的那个标记,*/

Highwater::  0x0b800089  ext#: 15     blk#: 8      ext size: 8

#blocks in seg. hdr's freelists: 0

#blocks below: 118/* 在low高水平线下下面的数据块的数量*/

mapblk  0x00000000  offset: 15

Level 1 BMB for High HWM block: 0x0b80008a  /高低水平线标记的块的地址,通过前面,我们基本可以理解高低水平线了,extent被数据完全添满的的那个low高水平线

Level 1 BMB for Low HWM block: 0x0b800079高水平线就是这个段(表) 被分配的最大的那个extent的标记了,我们所说的高水平线造成的全表扫描浪费i/o的那部分

就是hight , low高水平线之间的那部分数据块了。意思就是这个意思了,我们用append提示进行insert的时候,数据就不会写在hight ,low高水平线之间了,而是直接写在hight高水平线后面,当然了hight高水平线最终还是要在最后的了。意思就是

这个意思了。*/

--------------------------------------------------------/*这部分说的是位图块的分布情况。因为某些字段没有实际填充数据,不太容易说明白。

Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0我从线上数据中抓了一个段数据说明情况 */

L2 Array start offset:  0x00001434

First Level 3 BMB:  0x00000000

L2 Hint for inserts:  0x0b80000a

Last Level 1 BMB:  0x0b80008a

Last Level II BMB:  0x0b80000a

Last Level III BMB:  0x00000000

Map Header:: next  0x00000000  #extents: 17   obj#: 66303  flag: 0x10000000

Inc # 0

1068E74D0 00010000 00002000 0000000000001434  [...... ........4]/*二级位图extent数组的起始地址0x1434 + sizeof(blk_head)=20 =起始地址*/

1068E74E0000000000257E01100000003025F4010[......]  /*00000000第一个levl3 bimp blk0257E011第一个具有空闲空间的levl2 bitmap bkk

00000003levl2 bitmap 的数量025F4010: 最后一个level 1 exetent RDBA */

1068E74F00257E0110000000000000000 00000000  [.W..............]/*0257E011最后一个 level 2 bitmap blk */

1068E7500 00000000 0000000000000133024F8011[...........3.O..]/00000133=#extents: 307=第308个extent

024F8011=Map Header:: next  0x024f8011下一个段 extent map blk的rdba

上面的307=0x133说的是extent[307]的rdba放在这个extent  map  blk里。

这里又牵扯了一个新的数据块类型 0x24  0x24=PAGETABLE EXTENT MAP BLOCK* /

1068E7510 0000CB77 10000000 02400009 00000008  [...w.....@......]

1068E7520 02400011 00000008 02400019 00000008[.@.......@......]

--------------------------------------------------------

Segment Type: 1 nl2: 3      blksz: 8192   fbsz: 0

L2 Array start offset:  0x00001434

First Level 3 BMB:  0x00000000

L2 Hint for inserts:  0x0257e011

Last Level 1 BMB:  0x025f4010

Last Level II BMB:  0x0257e011

Last Level III BMB:  0x00000000

Map Header:: next  0x024f8011  #extents: 307  obj#: 52087  flag: 0x10000000

Inc # 0

Extent Map

-----------------------------------------------------------------/* 这会看这个exnten map有点象地图了吧,前面说的时候只有一个地址不太象,

0x0b800009  length: 8现在象了吧,每个 extent的大小都标记了*/

0x0b800011  length: 8

0x0b800019  length: 8

0x0b800021  length: 8

0x0b800029  length: 8

0x0b800031  length: 8

0x0b800039  length: 8

0x0b800041  length: 8

0x0b800049  length: 8

0x0b800051  length: 8

0x0b800059  length: 8

0x0b800061  length: 8

0x0b800069  length: 8

0x0b800071  length: 8

0x0b800079  length: 8

0x0b800081  length: 8

0x0b800089  length: 128

Auxillary Map

--------------------------------------------------------/*  这里就记录了每个一级位图块的地址他所管辖的实际记录数据的数据块开始的地址。*/

Extent 0     :  L1 dba:  0x0b800009 Data dba:  0x0b80000c

Extent 1     :  L1 dba:  0x0b800009 Data dba:  0x0b800011

Extent 2     :  L1 dba:  0x0b800019 Data dba:  0x0b80001a

Extent 3     :  L1 dba:  0x0b800019 Data dba:  0x0b800021

Extent 4     :  L1 dba:  0x0b800029 Data dba:  0x0b80002a

Extent 5     :  L1 dba:  0x0b800029 Data dba:  0x0b800031

Extent 6     :  L1 dba:  0x0b800039 Data dba:  0x0b80003a

Extent 7     :  L1 dba:  0x0b800039 Data dba:  0x0b800041

Extent 8     :  L1 dba:  0x0b800049 Data dba:  0x0b80004a

Extent 9     :  L1 dba:  0x0b800049 Data dba:  0x0b800051

Extent 10    :  L1 dba:  0x0b800059 Data dba:  0x0b80005a

Extent 11    :  L1 dba:  0x0b800059 Data dba:  0x0b800061

Extent 12    :  L1 dba:  0x0b800069 Data dba:  0x0b80006a

Extent 13    :  L1 dba:  0x0b800069 Data dba:  0x0b800071

Extent 14    :  L1 dba:  0x0b800079 Data dba:  0x0b80007a

Extent 15    :  L1 dba:  0x0b800079 Data dba:  0x0b800081

Extent 16    :  L1 dba:  0x0b800089 Data dba:  0x0b80008b

--------------------------------------------------------

Second Level Bitmap block DBAs

--------------------------------------------------------

DBA 1:   0x0b80000a

End dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11

/* 好了,到这里关于extent的内部结构的一个初步分析就到这里了,这个分析是基于本地管理的表空间的一个分析,对于字典管理的表空间的空间分配情况,因为这种方式已经过时了,我们就没有 必要去做了,通过这个分析,我们基本知道了oracle数据块扩展的一般规则, 其中一些参数取决于建立表空间文件,和建表语句的存储部分的选项,9i / 10g默认情况下 一个extent的初次分配是64k既8个block ,在前16个extent基本是8个块,超过16个extent就不一定了,基本是按64k,1m ,8m,256m这样增长的。

每个level 1 bmb block管理实际的数据块,level 2 bmb block记录了level 1 bmb block的地址,当表空间或数据文件里有多个段(表)的时候,一个表的数据就不总是连续的了,这时候level 2 bmb block就发挥作用了,但是oracle内核保证一个extent内部的数据块是连续的,所以就引入了另外一个问题,oracle的一次物理i/o,是不能跨越extent的,当一个extent是8个块的时候,我们就是把参数db_BLOCK_READ_COUNT设为16也没有用,一次只能读8个块。

还有我们也看到了高水平线的问题了,我们平常说的高水平线,其实是hight  HWM还有一个low HWM标记的是被完全写满的哪个extent,我们平常说的因为高水平线导致的全表扫描浪费i/0的那部分数据块基本是在low hwm和hight hwm之间的这部分数据块。 如果一个新表,第一次插入数据的时候,如果高水平线所在的extent没有被完全添满的话,hight , low之间还是有一段空间的。10g如果开启了表的row moveable的话,是可以处理掉一部分的,但是就修改数据的rowid如果表的列中涉及到rowid就会有问题了。* /

搞明白了这个部分对我们分析数据文件就奠定了一个基本的入口了,至少我们知道了,一个表的数据可以通过怎么样一个方法去找了,避免了全文件扫描了,

关于 blk_type0x24=PAGETABLE EXTENT MAP BLOCK的说明

我们已经在段头块(segment head block  BLK_TYPE=0X23)中已经看到了extent  map数组的结构了,

一部分是expent map arrary记录的是  一级位图块的rdba和这个位图所管理的datablock的数量,

一部分是 Auxillary Map   arrary记录的 这个一级位图块 所管理的datablock开始的位置。

例如:

Extent MapAuxillary Map

-------------------------------------------------------------------------------------------------------------------------

0x02400009  length: 8Extent 0     :  L1 dba:  0x02400009 Data dba:  0x0240000c

0x02400011  length: 8Extent 1     :  L1 dba:  0x02400009 Data dba:  0x02400011

0x02400019  length: 8Extent 2     :  L1 dba:  0x02400019 Data dba:  0x0240001a

0x024f4009  length: 8192Extent 3     :  L1 dba:  0x02400019 Data dba:  0x02400021

0x024f6009  length: 8192Extent 4     :  L1 dba:  0x02400029 Data dba:  0x0240002a

下面的部分是一个 page table  extent  map  block的例子

Start dump data blocks tsn: 10 file#: 9 minblk 1015825 maxblk 1015825

buffer tsn: 10 rdba: 0x024f8011 (9/1015825)

scn: 0x0000.00271cdb seq: 0x01 flg: 0x04 tail: 0x1cdb2401

frmt: 0x02 chkval: 0x13bc type:0x24=PAGETABLE EXTENT MAP BLOCK   /*/* 段extent  map  block  */

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00000001068E7400 to 0x00000001068E9400

1068E7400 24A20000 024F8011 00271CDB 00000104  [$....O...'......]/*  标准的block  head  */

1068E7410 13BC000000000088000000000000CB77[...............w] /*00000088数组的长度,本blk中记录了多少个extent ,

00000000 下一个extent map blk的地址rdba,这里是0,因为没有下一个了。

0000CB77object_id = obj#: 52087 */

1068E742010000000024F8009 00002000 024FA009[.....O.... ..O..]10000000= flag: 0x10000000*/

1068E7430 00002000 024FC009 00002000 024FE009  [.. ..O.... ..O..]经过观察一个pagetable extent map block最多只能装下508个extent数据,

1068E7440 00002000 02500009 00002000 02502009  [.. ..P.... ..P .]Auxillary Map 的开始地址是offset = 4100 =

1068E7450 00002000 02504009 00002000 02506009  [.. ..P@... ..P`.]        sizeof(blk_Head)=20 + sizeof(ext dict) 16 + sizof (texten item ) 8 * 508 */

1068E7460 00002000 02508009 00002000 0250A009  [.. ..P.... ..P..]024F8009 00002000 024FA009extent  map arrary  的开始地址offset  =36 = ;

1068E7470 00002000 0250C009 00002000 0250E009  [.. ..P.... ..P..]sizeof(blk_head) =20 + sizeof(exy dict) 16 = 36

1068E7480 00002000 02510009 00002000 02512009  [.. ..Q.... ..Q .]

1068E7490 00002000 02514009 00002000 02516009  [.. ..Q@... ..Q`.]

1068E74A0 00002000 02518009 00002000 0251A009  [.. ..Q.... ..Q..]

1068E74B0 00002000 0251C009 00002000 0251E009  [.. ..Q.... ..Q..]

**********************************************

****************

1068E7840 00002000 02600009 00002000 02602009  [.. ..`.... ..` .]

1068E7850 00002000 02604009 00002000 02606009  [.. ..`@... ..``.]

1068E7860 00002000 00000000 00000000 00000000  [.. .............]

1068E7870 00000000 00000000 00000000 00000000  [................]

Repeat 184 times

1068E8400 00000000 024F8009 024F8012 024FA009  [.....O...O...O..]

1068E8410 024FA011 024FC009 024FC011 024FE009  [.O...O...O...O..]

1068E8420 024FE011 02500009 02500011 02502009  [.O...P...P...P .]

1068E8430 02502011 02504009 02504011 02506009  [.P ..P@..P@..P`.]

1068E8440 02506011 02508009 02508011 0250A009  [.P`..P...P...P..]

1068E8450 0250A011 0250C009 0250C011 0250E009  [.P...P...P...P..]

1068E8460 0250E011 02510009 02510011 02512009  [.P...Q...Q...Q .]

1068E8470 02512011 02514009 02514011 02516009  [.Q ..Q@..Q@..Q`.]

1068E8480 02516011 02518009 02518011 0251A009  [.Q`..Q...Q...Q..]

1068E8490 0251A011 0251C009 0251C011 0251E009  [.Q...Q...Q...Q..]

*******************************

***************************

1068E93C0 70457863 65707469 6F6E3A20 C9E8B6A8  [pException: ....]

1068E93D0 B9ABCBBE B2FAC6B7 B1A8BCDB CEDED0A7  [................]

1068E93E0 CAB1B3F6 B4ED0778 6B090712 150FFFFF  [.......xk.......]

1068E93F0 FF0AB2D9 D7F7CAA7 00000000 1CDB2401  [..............$.]

EMB Dump:

Map Header:: next  0x00000000  #extents: 136  obj#: 52087  flag: 0x10000000

Inc # 0

Extent Map

-----------------------------------------------------------------

0x024f8009  length: 8192

0x024fa009  length: 8192

0x024fc009  length: 8192

0x024fe009  length: 8192

******************

0x02600009  length: 8192

0x02602009  length: 8192

0x02604009  length: 8192

0x02606009  length: 8192

Auxillary Map

--------------------------------------------------------

Extent 0     :  L1 dba:  0x024f8009 Data dba:  0x024f8012

Extent 1     :  L1 dba:  0x024fa009 Data dba:  0x024fa011

Extent 2     :  L1 dba:  0x024fc009 Data dba:  0x024fc011

Extent 3     :  L1 dba:  0x024fe009 Data dba:  0x024fe011

Extent 4     :  L1 dba:  0x02500009 Data dba:  0x02500011

Extent 5     :  L1 dba:  0x02502009 Data dba:  0x02502011

Extent 6     :  L1 dba:  0x02504009 Data dba:  0x02504011

Extent 7     :  L1 dba:  0x02506009 Data dba:  0x02506011

***************************************

Extent 133   :  L1 dba:  0x02602009 Data dba:  0x02602011

Extent 134   :  L1 dba:  0x02604009 Data dba:  0x02604011

Extent 135   :  L1 dba:  0x02606009 Data dba:  0x02606011

--------------------------------------------------------

End dump data blocks tsn: 10 file#: 9 minblk 1015825 maxblk 1015825

*** 2008-06-07 15:26:55.524

Start dump data blocks tsn: 22 file#: 46 minblk 12 maxblk 12/ * 现在12块已经有数据了,看看他被分了个什么官做 ??

buffer tsn: 22 rdba: 0x0b80000c (46/12)

scn: 0x0001.000f2e59 seq: 0x01 flg: 0x06 tail: 0x2e590601

frmt: 0x02 chkval: 0x2e3f type: 0x06=trans data                      /* 块类型: 数据块*/

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0000000106768C00 to 0x000000010676AC00/关于0x06=trans data类型的数据快的结构和分析我们以后再给出 */

106768C00 06A20000 0B80000C 000F2E59 00010106  [...........Y....]

106768C10 2E3F0000 01000000 000102FF 000EE87B  [.?.............{]

106768C20 0001FFFF 00023200 0B800009 000E0005  [......2.........]

106768C30 0000298E 00800CB2 04102400 21F50000  [..).......$.!...]

*************************************************************************

106768DF0 1F8D09E0 09EE09F9 0A070A12 0A200A2B  [............. .+]

106768E00 0A390A44 0A520A5D 0A6B0A76 0A840A8F  [.9.D.R.].k.v....]

106768E10 0A9D0AA8 0AB60AC1 0ACF0ADA 0AE80AF3  [................]

106768E20 0B010B0C 0B1A0B25 0B330B3E 0B4C0B57  [.......%.3.>.L.W]

106768E30 0B650B70 0B7E0B89 0B970BA2 0BB00BBB  [.e.p.~..........]

106768E40 0BC90BD4 0BE20BED 0BFB0C06 0C140C1F  [................]

106768E50 0C2D0C38 0C460C51 0C5F0C6A 0C780C83  [.-.8.F.Q._.j.x..]

106768E60 0C910C9C 0CAA0CB5 0CC30CCE 0CDC0CE7  [................]

****************************

********************************

10676ABC0 010203C2 131C0353 59532C01 0203C213  [.......SYS,.....]

10676ABD0 1D065055 424C4943 2C010203 C2131E03  [..PUBLIC,.......]

10676ABE0 5359532C 010203C2 131F0650 55424C49  [SYS,.......PUBLI]

10676ABF0 432C0102 03C21320 03535953 2E590601  [C,..... .SYS.Y..]

Block header dump:  0x0b80000c

Object id on Block? Y

seg/obj: 0x102ff  csc: 0x01.ee87b  itc: 2  flg: E  typ: 1 - DATA

brn: 0  bdba: 0xb800009 ver: 0x01 opc: 0

inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x000e.005.0000298e  0x00800cb2.0410.24  --U-  501  fsc 0x0000.000f2e59

0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

data_block_dump,data header at 0x106768c64

===============

tsiz: 0x1f98

hsiz: 0x3fc

pbl: 0x106768c64

bdba: 0x0b80000c

76543210

flag=--------

ntab=1

nrow=501

frre=-1

fsbo=0x3fc

fseo=0x725

avsp=0x329

tosp=0x329

0xe:pti[0]      nrow=501        offs=0

0x12:pri[0]     offs=0x1653

0x14:pri[1]     offs=0x1661

0x16:pri[2]     offs=0x166c

0x18:pri[3]     offs=0x167a

0x1a:pri[4]     offs=0x1685

0x1c:pri[5]     offs=0x1693

0x1e:pri[6]     offs=0x169e

****************

****************

0x3f4:pri[497]  offs=0x9ae

0x3f6:pri[498]  offs=0x9bc

0x3f8:pri[499]  offs=0x9c7

0x3fa:pri[500]  offs=0x9d5

block_row_dump:

tab 0, row 0, @0x1653

tl: 14 fb: --H-FL-- lb: 0x1  cc: 2

col  0: [ 3]  c2 11 2b

col  1: [ 6]  50 55 42 4c 49 43

tab 0, row 1, @0x1661

tl: 11 fb: --H-FL-- lb: 0x1  cc: 2

col  0: [ 3]  c2 11 2c

col  1: [ 3]  53 59 53

tab 0, row 2, @0x166c

tl: 14 fb: --H-FL-- lb: 0x1  cc: 2

col  0: [ 3]  c2 11 2d

col  1: [ 6]  50 55 42 4c 49 43

oracle老报604和10275,翻出来了 老东西了 , oracle 数据库解析 extent 数据结构解析...相关推荐

  1. oracle 10035 err 942,案例:Oracle日志报错 Fatal NI connect error 12170 TNS-12535 TNS-00505

    天萃荷净 Oracle数据库alert日志文件报错Fatal NI connect error 12170,通过查看mos相关文章找到解决办法 今天在一台服务器的日志文件中,发现如下信息: Fatal ...

  2. 连接远程服务器CredSSP加密Oracle修正报错解决办法

    连接远程服务器CredSSP加密Oracle修正报错解决办法: 打开注册表,快捷输入 "regedit"(类似找命令提示符 输入 cmd 一样)找文件夹 路径:HKLM(缩写)\S ...

  3. ORACLE安装报错解决

    今天在虚拟机中安装了一个WINDOWS系统,用于安装oracle服务器:从安装到使用中出现了很多的问题,把这些问题解决掉,花了不少时间,查了不少的资料. 第一个,我在安装过程中,出现了ORA-0092 ...

  4. oracle启动报参数不正确,【oracle】模拟故障 - 参数修改导致无法启动oracle

    问题:把spfile中的processes参数改成10,后出现无法启动oracle数据库. SQL> alter system set processes = 10 scope=spfile; ...

  5. oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT

    原文出处:http://www.cnblogs.com/Ronger/archive/2011/12/19/2293509.html oracle之报错:ORA-00054: 资源正忙,要求指定 NO ...

  6. Oracle单机报监听不支持服务,(转)oracle 启动监听 报“监听程序不支持服务” 解决...

    转自 http://www.51testing.com/html/99/478599-842622.html 今天安装了oracle后,启动监听,报错如下: 启动tnslsnr: 请稍候... TNS ...

  7. db2查最新值的前一天值_现在的C1驾照值多少钱?最新价格曝光,老司机一看赚翻了...

    我国马路上的汽车数量越来越多,考驾照也成为了家常便饭,现在没有驾照都不好意思说出口.以前我国考驾照难度较低,拿证流程快,只要一个月就能拿到驾照.现在c1驾照的考试难度不断增加,不知道c1驾照值多少钱呢 ...

  8. oracle导入报错39002,oracle impdp ORA-39002

    1. 导入报错 [oracle@testlink-standby ~]$ impdp system/oracle@orcl DIRECTORY=db_backup DUMPFILE=QA2_EXPOR ...

  9. oracle没报错 开不了库,oracle 数据库无法启动,报错 terminating the instance due to error 16014...

    前言: 早晨上班,开发告知数据库连接不上,说是报内存溢出,查看内存空余空间确实不足,遂将高内存进程结束,但结束后还是连接不上,重启数据库,悲剧发生了,数据库居然启不来了,因前一天改了下dastart文 ...

最新文章

  1. 详略。。设计模式1——单例。。。。studying
  2. php中命名空间和use
  3. oracle的listagg函数
  4. .net 网页播放器
  5. python 封装_Python 面向对象三大特性之封装
  6. java学习(18):巩固练习
  7. python直角三角形型编程_python打印直角三角形与等腰三角形实例代码
  8. 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!
  9. iOS 使点击事件穿透透明的UIView
  10. 项目奖金一般是多少_二级建造师一个月薪资平均有多少?
  11. SpringBoot + Mybatis-puls + ClickHouse增删改查入门教程
  12. win10 mysql数据库中文乱码
  13. 机器学习代码实战——线性回归(单变量)(Linear Regression)
  14. [转载][HASS.IO] 【HASSOS安装】成功安装HASSOS 1.9(避开了大部分坑版)
  15. teched2004视频资料下载,又加了5段,全是开发类的
  16. mac解压jar文件
  17. 系统日常维护(电脑系统)
  18. python上海房价数据分析_Python数据分析告诉你为何上海的二手房你都买不起
  19. 微信服务号获取地理位置
  20. 机器视觉该怎么样系统学习

热门文章

  1. 【clickhouse】docker 下 搭建 clickhouse 监控
  2. Linux : rz、sz命令-从本地拷贝文件到服务器
  3. 【Flink】No key set. This method should not be called outside of a keyed context.
  4. 【Flink】No tests found matching Method xx from org.junit.internal.requests.ClassRequest
  5. Spring-IOC之BeanDefinitionHolder
  6. 【安全】导入本地linux用户到LDAP中
  7. 关于Java的String字符串常量的长度问题(Error:(14, 22) java: 常量字符串过长)
  8. 03-postgresql报错ERROR: operator does not exist: numeric = character varyin
  9. 大数据面试-05-大数据工程师面试题
  10. 【linux系统编程】基础开发工具:yum