ITPub博客

首页 > Linux操作系统 > Linux操作系统 > LOB (2)

LOB (2)

原创 Linux操作系统 作者:ylw66 时间:2009-09-24 16:56:25 0 删除 编辑

接LOB (1)

SQL> insert into t values(4,lpad('a',9000,'a'));

已创建 1 行。

SQL> commit;

提交完成。

通过pl/sql developer查看t_lob的大小:4000字节

 

SQL> insert into t values(5,lpad('a',12000,'a'));

已创建 1 行。

SQL> commit;

提交完成。

通过pl/sql developer查看t_lob的大小:还是4000字节

 

说明通过insert语句写lob,最大只能写4000字节

那如何写更多字节的lob呢:通过dbms_lob.write

创建这样一个存储过程

create or replace procedure insert_clob(v_id in number) is
begin
  declare  
  v_lob   clob;  
  v_text   varchar2(10000);  
  begin  
    v_text:=lpad('a',10000,'a'); 
    insert  into t values(v_id,empty_clob());  
    select  t_lob into v_lob from t where t.id =v_id for update;  
    dbms_lob.write(v_lob,length(v_text),1,v_text);          
    commit;  
  end;
end insert_clob;

 

execute insert_clob(6);

 

插入了10000个a的记录,dump这条记录的block

col  0: [ 2]  c1 07

col  1: [48]

 00 54 00 01 02 0c 80 00 00 02 00 00 00 01 00 00 00 00 75 c7 00 1c 05 00 00

 00 00 02 0e 98 00 00 00 00 00 02 02 c0 00 18 02 c0 00 14 02 c0 00 42

02 c0 00 18 02 c0 00 14 02 c0 00 42比较奇怪,好像是:
02 c0 00 18  ---- datafile 11 block 24

02 c0 00 14  ---- datafile 11 block 20

02 c0 00 42  ---- datafile 11 block 66

再想下10000a需要20000个字节,每个chunk 8192个字节,所以保存10000个a应该要3个chunk

难道这就是这3个chunk

dump 这三个block,证实了我的观点

 

Start dump data blocks tsn: 12 file#: 11 minblk 24 maxblk 24

buffer tsn: 12 rdba: 0x02c00018 (11/24)

scn: 0x0000.0152b3d3 seq: 0x02 flg: 0x04 tail: 0xb3d32802

frmt: 0x02 chkval: 0x9543 type: 0x28=PAGETABLE MANAGED LOB BLOCK

Long field block dump:

Object Id    31812

LobId: 0001000075C7 PageNo        0

Version: 0x0000.00000001  pdba: 46137361 

61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

    61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

。。。。。。

 

Start dump data blocks tsn: 12 file#: 11 minblk 20 maxblk 20

buffer tsn: 12 rdba: 0x02c00014 (11/20)

scn: 0x0000.0152b3d3 seq: 0x02 flg: 0x04 tail: 0xb3d32802

frmt: 0x02 chkval: 0x954e type: 0x28=PAGETABLE MANAGED LOB BLOCK

Long field block dump:

Object Id    31812

LobId: 0001000075C7 PageNo        1

Version: 0x0000.00000001  pdba: 46137361 

61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

    61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

。。。。

 

Start dump data blocks tsn: 12 file#: 11 minblk 66 maxblk 66

buffer tsn: 12 rdba: 0x02c00042 (11/66)

scn: 0x0000.0152b3d3 seq: 0x02 flg: 0x04 tail: 0xb3d32802

frmt: 0x02 chkval: 0x954b type: 0x28=PAGETABLE MANAGED LOB BLOCK

Long field block dump:

Object Id    31812

LobId: 0001000075C7 PageNo        2

Version: 0x0000.00000001  pdba: 46137409 

61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

    61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00 61 00

。。。。。。

 

三个block都有相同的LobId,PageNo也很说明问题,分别是第0,1,2个chunk

在t表上数据区的inode能保存多少个chunk的地址呢,有资料说是12个

当大于12个chunk时,inode保存到LOBINDEX上了

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22111412/viewspace-615481/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: LOB (1)
下一篇: LOB (3)
请登录后发表评论 登录
全部评论

注册时间:2009-07-29

  • 博文量
    57
  • 访问量
    107663