楼主: 超级野人

[精华] 谁能解释这种奇怪的现象?

[复制链接]
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
 楼主| 发表于 2004-7-27 11:53 | 显示全部楼层
不知道实际上是不是真的按照这样的模式来存储的

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
21
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:36
发表于 2004-7-27 11:59 | 显示全部楼层
最初由 超级野人 发布
[B]不知道实际上是不是真的按照这样的模式来存储的 [/B]


难道oracle自己做了一套,然后又辛苦编了一套文档来迷惑人

佩服你的质疑精神。

使用道具 举报

回复
论坛徽章:
52
SQL数据库编程大师
日期:2011-04-13 12:09:01奥运会纪念徽章:水球
日期:2012-10-08 09:35:51蛋疼蛋
日期:2012-11-19 10:28:53鲜花蛋
日期:2012-12-05 14:37:57紫蛋头
日期:2012-12-11 17:27:27紫蛋头
日期:2012-12-24 23:00:26兰博基尼
日期:2013-11-21 09:19:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
发表于 2004-8-10 16:37 | 显示全部楼层

Re: 谁能解释这种奇怪的现象?

最初由 超级野人 发布
[B]每次插入字母后,行长度的值却是很准确的,一直在变化,不知道这是什么回事,难道oracle设定每一row的数据存储空间必须不小于4个字节么。 [/B]



SELECT SUBSTR(ROWID,1,6) "OBJECT",SUBSTR(ROWID,7,3) "FIL",SUBSTR(ROWID,10,6) "BLOCK",SUBSTR(ROWID,16,3) "ROW" FROM t1;

OBJECT       FIL    BLOCK        ROW
------------ ------ ------------ ------
AAAMnv       AAB    AAAOrq       AAA


我赞成这种现象用ROWID来说明比较合理:
因为一旦数据保存到数据块中,它的rowid就不会变化,当发生行迁移时,应用只能根据rowid找到数据迁移前数据的存储地址,所以在原数据存储地址必须保存当前数据存储的物理地址,因为发生行迁移objectid不会发生变化,所以用六个字节可以保持数据当前存储物理位置;
为了在性能与空间的平衡,oracle至少会预留六个字节保存行迁移信息,当插入数据小于6字节时,oracle会预先分配6字节,若(数据5字节+1 column length)蛮六字节,则在发生行迁移时可以利用这些空间保存行迁移的信息.

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2004-8-10 18:17 | 显示全部楼层

Re: Re: 谁能解释这种奇怪的现象?

最初由 accelerator 发布
[B]


SELECT SUBSTR(ROWID,1,6) "OBJECT",SUBSTR(ROWID,7,3) "FIL",SUBSTR(ROWID,10,6) "BLOCK",SUBSTR(ROWID,16,3) "ROW" FROM t1;

OBJECT       FIL    BLOCK        ROW
------------ ------ ------------ ------
AAAMnv       AAB    AAAOrq       AAA


我赞成这种现象用ROWID来说明比较合理:
因为一旦数据保存到数据块中,它的rowid就不会变化,当发生行迁移时,应用只能根据rowid找到数据迁移前数据的存储地址,所以在原数据存储地址必须保存当前数据存储的物理地址,因为发生行迁移objectid不会发生变化,所以用六个字节可以保持数据当前存储物理位置;
为了在性能与空间的平衡,oracle至少会预留六个字节保存行迁移信息,当插入数据小于6字节时,oracle会预先分配6字节,若(数据5字节+1 column length)蛮六字节,则在发生行迁移时可以利用这些空间保存行迁移的信息. [/B]


agree

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
 楼主| 发表于 2004-8-13 09:41 | 显示全部楼层
我觉得该空间可能是存储该行数据的影像在回滚段里的位置。(当该行被更改且没被提交时)

使用道具 举报

回复
论坛徽章:
0
发表于 2009-5-7 17:25 | 显示全部楼层

关注

关注

使用道具 举报

回复
认证徽章
论坛徽章:
176
现任管理团队成员
日期:2011-05-07 01:45:08版主7段
日期:2012-07-05 02:21:03ITPUB长老会成员
日期:2015-05-07 15:11:10ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB牛人
日期:2010-10-25 12:41:322010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:19
发表于 2009-6-26 14:30 | 显示全部楼层
看看精华帖学习中!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表