Oracle 中关于超过253列内部数据的存储

php中文网
发布: 2016-06-07 17:21:41
原创
1020人浏览过

建表语句declare v_sql varchar2(32767) ;begin v_sql :=

建表语句
declare
  v_sql varchar2(32767) ;
begin
  v_sql := 'create table test ( ' ;
  for i in 1..500 loop
    v_sql := v_sql || 'name'||i||' varchar2(2000) ,' ;
  end loop ;
  v_sql := substr(v_sql,1,length(v_sql)-1) ;
  v_sql := v_sql || ');' ;
  dbms_output.put_line(v_sql) ;
end ;
复制粘贴创建表

_dex@DAVID> desc test
Name                                                  Null?    Type
----------------------------------------------------- -------- ------------------------------------
NAME1                                                          VARCHAR2(2000)
NAME2                                                          VARCHAR2(2000)
NAME3                                                          VARCHAR2(2000)
.....
NAME500                                                        VARCHAR2(2000)

_dex@DAVID> insert into test (name500) values (lpad(1,300,'d')) ;

1 row created.


_dex@DAVID> select
  2  length(t.name500),
  3  dbms_rowid.rowid_relative_fno(t.rowid) as "FNO#",
  4  dbms_rowid.rowid_block_number(t.rowid) as "BLK#",
  5  dbms_rowid.rowid_row_number(t.rowid) as "ROW#"
  6  from dex.test t
  7  /

LENGTH(T.NAME500)      FNO#      BLK#      ROW#
----------------- ---------- ---------- ----------
              300          4        925          1
                1          4        925          3
              300          4        925          5


使用bbed查看

首先看row#为1长度为300的数据
BBED> set dba 4,925
        DBA            0x0100039d (16778141 4,925)

BBED> p kdbr
sb2 kdbr[0]                                @142      7504
sb2 kdbr[1]                                @144      7250
sb2 kdbr[2]                                @146      6991
sb2 kdbr[3]                                @148      6737
sb2 kdbr[4]                                @150      6177
sb2 kdbr[5]                                @152      5923

BBED> p *kdbr[1]
rowdata[1327]
-------------
ub1 rowdata[1327]                          @7374    0x28

BBED> dump /v offset 7374 count 128
File: /u01/apps/Oracle/oradata/david/users01.dbf (4)
Block: 925    Offsets: 7374 to 7501  Dba:0x0100039d
-------------------------------------------------------
2801f501 00039d00 00ffffff ffffffff l (.õ.............
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................
ffffffff ffffffff ffffffff ffffffff l ................

这些是row piece header
2801f501 00039d00 00

1个字节的flag=28
16进制28=二进制00101000=--H-F---=head of rowpiece + first data piece
1个字节的lb(itl slot)=01
1个字节的cc column count=f5=245 (因为最后一列name500不为空,所以null都需要使用ff来表示,也就是说需要存储500列的数据)

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号