ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle专题深入讨论 » 请教问题:表行删除后再插入相同的纪录

标题: 请教问题:表行删除后再插入相同的纪录
离线 2jliu
梦想启动未来


精华贴数 1
个人空间 0
技术积分 2498 (638)
社区积分 455 (1524)
注册日期 2006-8-7
论坛徽章:18
2008北京奥运纪念徽章:棒球生肖徽章2007版:猴生肖徽章2007版:鸡生肖徽章2007版:鼠  
      

发表于 2008-9-2 11:29 
请教问题:表行删除后再插入相同的纪录

表行(非索引)删除后再插入相同的行,该插入的行会使用原先行所在的块吗?


__________________
http://hostnm(virtual).domain:port
只看该作者    顶部
离线 2jliu
梦想启动未来


精华贴数 1
个人空间 0
技术积分 2498 (638)
社区积分 455 (1524)
注册日期 2006-8-7
论坛徽章:18
2008北京奥运纪念徽章:棒球生肖徽章2007版:猴生肖徽章2007版:鸡生肖徽章2007版:鼠  
      

发表于 2008-9-2 11:34 
测试说明会使用


__________________
http://hostnm(virtual).domain:port
只看该作者    顶部
离线 gvora


精华贴数 0
个人空间 0
技术积分 361 (5526)
社区积分 1 (47308)
注册日期 2008-8-16
论坛徽章:1
数据库板块每日发贴之星     
      

发表于 2008-9-2 11:39 
不一定,有可能删除行所在的块又被放入了其他的行数据
或者相同的行被插入其他数据块
主要看freelist的排列,当进行插入操作时,oracle会将数据放入队列中第一个满足空间要求的块。


__________________
Fighting
只看该作者    顶部
离线 gvora


精华贴数 0
个人空间 0
技术积分 361 (5526)
社区积分 1 (47308)
注册日期 2008-8-16
论坛徽章:1
数据库板块每日发贴之星     
      

发表于 2008-9-2 11:43 


QUOTE:
原帖由 2jliu 于 2008-9-2 11:34 发表
测试说明会使用

你应该是在删除操作之后紧接着就进行插入吧
这样经过删除操作的块将位于freelist队列的头部
当进行插入操作时,oracle就很自然的会把数据插入原来的块中


__________________
Fighting
只看该作者    顶部
离线 Sea_jk
蛋~炒~饭


精华贴数 0
个人空间 26
技术积分 1222 (1519)
社区积分 13 (9710)
注册日期 2007-8-7
论坛徽章:7
授权会员2008北京奥运纪念徽章:足球生肖徽章2007版:牛ITPUB新首页上线纪念徽章  
      

发表于 2008-9-2 16:01 
弱问一下,这个有什么作用么?


__________________
****************************************
                  可以特立,不能独行
            学而不思则罔,思而不学则怠
只看该作者    顶部
离线 gvora


精华贴数 0
个人空间 0
技术积分 361 (5526)
社区积分 1 (47308)
注册日期 2008-8-16
论坛徽章:1
数据库板块每日发贴之星     
      

发表于 2008-9-2 21:22 
呵呵,lz精神可嘉!


__________________
Fighting
只看该作者    顶部
离线 晶晶小妹
月是上弦


精华贴数 3
个人空间 6470
技术积分 1931 (855)
社区积分 9 (11915)
注册日期 2008-2-15
论坛徽章:3
现任管理团队成员生肖徽章2007版:猴数据库板块每日发贴之星   
      

发表于 2008-9-4 11:11 


QUOTE:
原帖由 Sea_jk 于 2008-9-2 16:01 发表
弱问一下,这个有什么作用么?

这个没什么用。但它可以增加你对Oracle的了解。
特别如果你自己动手去探索,在探索过程中,你将了解到很多有用的知识。
比如这道题,你想DUMP有新行插入的块,就必须知道块号、文件号,如何知道呢?通过探索,你学会了很多知识。
这些纯理论方面的东西,单纯的一个结果,没有任何的意义,关键在于探索结果的过程。


__________________
没有必胜的秘籍,没有方程式遵循
要赢~只有全身心的投入!



为了方便大家查阅,所有的文章都已转入空间

http://space.itpub.net/?13095417

请大家多多支持!
只看该作者    顶部
离线 晶晶小妹
月是上弦


精华贴数 3
个人空间 6470
技术积分 1931 (855)
社区积分 9 (11915)
注册日期 2008-2-15
论坛徽章:3
现任管理团队成员生肖徽章2007版:猴数据库板块每日发贴之星   
      

发表于 2008-9-4 11:19 
再来点没用的东西补充一下:

如果你删除一行后马上插入,行有可能会被插入到原来的块中,但不会占用原来的空间。比如有下面的表

ID
----
1
2
3

你删除了ID为1的行,马上又插入了ID为1的行,顺序将变为

ID
----
2
3
1
你可以DUMP块一下看看,ID为1的行虽然还在原来的块中,但偏移量已经不同了。


__________________
没有必胜的秘籍,没有方程式遵循
要赢~只有全身心的投入!



为了方便大家查阅,所有的文章都已转入空间

http://space.itpub.net/?13095417

请大家多多支持!
只看该作者    顶部
离线 viadeazhu
小V


精华贴数 0
个人空间 0
技术积分 51 (27790)
社区积分 0 (1850243)
注册日期 2008-8-22
论坛徽章:0
      
      

发表于 2008-9-4 11:24 
回复 #1 2jliu 的帖子

一般情况下,被删除的行会先被标记D,并不马上从table块中删除,当下一次update或insert时,
再移除。这时,只要有新加入的行的长度等于或小于原来被删除的行的长度,都有可能使用这一行的空间。

当然也有特殊情况,比如如果删除该行之后的block不在freelist中,那么我们就要等待它重新加入freelist,
并且轮到它被使用时,它的空间才会被使用。这就跟pctfree和pctused有关了。


只看该作者    顶部
离线 kewin
路,一直都在



精华贴数 0
个人空间 76
技术积分 990 (1940)
社区积分 36 (5837)
注册日期 2003-3-15
论坛徽章:2
2008北京奥运纪念徽章:沙滩排球     
      

发表于 2008-9-5 20:49 
如果是在同一个transaction中,如果前一个sql删除数据,而后面一个SQL是插入数据,如果该block可以容纳新插入的数据,那ORACLE会在原block中放入新的data。


__________________
JUST DO IT。
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问