当前位置:首页>编程日记>正文

探究oracle clob字段是怎样存储的

    clob字段存储的是文本,假设存储少于4000个字节则clob字段会和记录存放在一起,假设存储超过4000个字节,则不会与记录存放在一起。

值得注意的是,这里的4000个字节并非等同于varchar2(4000),那相当于什么呢。请看下列实验,数据库版本号是10.2.0.1.0:

drop table test_clob purge;
create table test_clob
(
  id number,
  clob1  clob
);

insert into test_clob values(1,Lpad('111',100,'1'));--236
insert into test_clob values(2,Lpad('222',500,'1'));--1036
insert into test_clob values(3,Lpad('333',1000,'1'));--2036
insert into test_clob values(4,Lpad('444',1982,'1'));--4000
insert into test_clob values(5,Lpad('555',1983,'1'));--4002
commit;

select rowid,
       dbms_rowid.rowid_object(rowid) object_id,
       dbms_rowid.rowid_relative_fno(rowid) file_id,
       dbms_rowid.rowid_block_number(rowid) block_id,
       dbms_rowid.rowid_row_number(rowid) num
  from test_clob;
ROWID               OBJECT_ID    FILE_ID   BLOCK_ID        NUM
------------------ ---------- ---------- ---------- ----------
AAAYQbAAFAADRpcAAA      99355          5     858716          0
AAAYQbAAFAADRpcAAB      99355          5     858716          1
AAAYQbAAFAADRpcAAC      99355          5     858716          2
AAAYQbAAFAADRpdAAA      99355          5     858717          0
AAAYQbAAFAADRpgAAA      99355          5     858720          0


alter system dump datafile 5 block 858716;
alter system dump datafile 5 block 858717;
alter system dump datafile 5 block 858720;

查看dump文件能够看到:

col  0: [ 2]  c1 02  --记录id=1   为啥是1 请看我曾经的帖子:http://blog.csdn.net/stevendbaguo/article/details/8010105
col  1: [236]
 00 54 00 01 02 0c 80 00 00 02 00 00 00 01 00 00 00 02 1a 85 00 d8 09 00 00
 00 00 00 00 c8 00 00 00 00 00 01 00 31 00 31 00 31 00 31 00 31 00 31 00 31
 ...........................................................................
 ...........................................................................
 
col  0: [ 2]  c1 03   --记录id=2
col  1: [1036]
 00 54 00 01 02 0c 80 00 00 02 00 00 00 01 00 00 00 02 1a 86 03 f8 09 00 00
 00 00 00 03 e8 00 00 00 00 00 01 00 31 00 31 00 31 00 31 00 31 00 31 00 31
 ...........................................................................
 ...........................................................................


col  0: [ 2]  c1 04   --记录id=3
col  1: [2036]
 00 54 00 01 02 0c 80 00 00 02 00 00 00 01 00 00 00 02 1a 87 07 e0 09 00 00
 00 00 00 07 d0 00 00 00 00 00 01 00 31 00 31 00 31 00 31 00 31 00 31 00 31
 ...........................................................................
 ...........................................................................
  
col  0: [ 2]  c1 05   --记录id=4
col  1: [4000]
 00 54 00 01 02 0c 80 00 00 02 00 00 00 01 00 00 00 02 1a 88 0f 8c 09 00 00
 00 00 00 0f 7c 00 00 00 00 00 01 00 31 00 31 00 31 00 31 00 31 00 31 00 31
 ...........................................................................
 ........................................................................... 


col  0: [ 2]  c1 06   --记录id=5
col  1: [40]
 00 54 00 01 02 0c 80 00 00 02 00 00 00 01 00 00 00 02 1a 89 00 14 05 00 00
 00 00 00 0f 7e 00 00 00 00 00 02 01 4d 98 ac


记录 Lpad('111',100,'1'));--236
记录 Lpad('222',500,'1')--1036
记录 Lpad('333',1000,'1')--2036
记录 Lpad('444',1982,'1')--4000
记录 Lpad('555',1983,'1')--4002

   看出规律来了,第一条记录我们觉得的长度是100,存在block中的长度是236,就是236=100*2+36。其它的规律都是这样。同一时候也能够看到存储超过4000个字节,就是长度为1982时这个就是临界值,大于这个之后就clob就存到其它地方了。


http://www.coolblog.cn/news/1296ea0cfad90f3f.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 行为模式之Template Method模式
  • 通过Spark进行ALS离线和Stream实时推荐