暂无图片
oracle 删除数据后新插入的数据写在哪里?
我来答
分享
暂无图片 匿名用户
oracle 删除数据后新插入的数据写在哪里?
暂无图片 5M

比如我一张表大小为450G,然后我删了100G数据,表空间使用大小还是464g,然后删了100G以后是350G,然后问题就是后面插入数据会使用这个表空间里删除的这100g的位置然后再使用464G扩展到480G的位置,还是会直接使用464G扩展到480G的位置这个删除的100G位置不用

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
请叫我囧半仙

会扩展新的空间来使用的,不使用删除数据的空间

暂无图片 评论
暂无图片 有用 0
打赏 0
西瓜你个吧啦

首先这个问题你要了解数据库的逻辑结构,段区块,一系列连续的块组成一个区,区是不能夸数据文件的,多个区组成一个段。

也就是说你可以理解你的数据会存储在一个叫段的逻辑存储结构中。表、索引、lob等特殊字段都会为其单独创建一个段,这个段里面会有至少一个64k的区,当数据越来越多,段里面的区就会不断增加,但到达一定坎的时候每次扩展的区大小也会变化,当表超过1000m时每新扩展一个区就会是64m

再来回答你标题的问题,段是一定会大于等于你数据大小的,默认段的大小是按区扩展的,那区是根据段大小自动计算下一个去殴打,最开始的时候是64k,最大的时候是分配64m。所以你可以理解你的表是一个或者多个预分配区组成的段(表、索引、lob等会单独段),所以在这个预分配空间中,你删除了其中一部分那就代表你的空间腾出来了,那有空间的情况不管啥数据看到是插入在当前的预分配空间中(段)。

再来聊聊为啥你这个空间不是按照你的删除的数据变化,因为在这里有个叫高水位的词,什么意思呢,做个比喻你可以这样理解,我插入了1000万条数据那表已经扩展到了300G的大小,这时候我删除中间的500w条,这时候数据大小应该是150G,但实际显示可能还在300g,我们可以理解为你的段里面虽然没存满,但是是断断续续的区块中有内容,所以他就保存当前情况,但是你的表时间在插入140G的数据,他还是显示300G。

当然正如前面所说你在特定的操作或者手动去回收的时候也可以高水位降下来。

暂无图片 评论
暂无图片 有用 0
打赏 0
PiscesCanon

oracle有个叫ASSM的技术,即自动段空间管理,ASSM的整体结构是3层位图块+数据块,如下:

                            L3块:段头

                                   |

                             /          \

                        L2块         L2块

                            |

                     /            \

                 L1块           L1块

                   |

            /             \

      数据块            数据块

除了insert /*+ append */(这种情况是直接高水位线以后申请新空间进行insert数据,进而抬高了高水位线),当向表中插入数据时,

        Oracle通过数据字典确定L3段头位置,通过L3找到第一个有可用数据块的L2块,

        然后根据会话的OS进程PID进行HASH算法达到一个值X,然后这个X就是确定了这个L2块中第X个L1块为目标,

        然后继续根据会话的OS进程PID进行HASH算法达到一个值Y,这个Y就是L1中第Y个数据块,这个时候数据将会再这个数据块中insert直到块满。

因此你的问题是Oracle会不会使用删了的100G,肯定是会的,被删了的100G让数据块变成未满数据的数据块,会成为上述ASSM的规则下的目标数据块被insert的时候选择。

题外话,ASSM规则实际上是支持了大并发插入,因为每个会话会得到不同的随机值X和Y,这样不同会话insert的时候能够分散使用不同的数据块进行insert,从而提高并发。当然,还受到高水位线限制。当ASSM规则下insert时没有可使用的块,高水位线会上移。

另外,你也可以看看这个,【Oracle】表碎片重用规则

暂无图片 评论
暂无图片 有用 0
打赏 0
伟鹏

会直接使用464G扩展到480G的位置
这个问题跟“高水位线”有关,删除数据后,Oracle通常不会立即将空间返回给表空间,即使高水位线以下的空间变得空闲。这是为了提高未来数据插入的性能。

暂无图片 评论
暂无图片 有用 0
打赏 0
广州_老虎刘

如果是append方式插入, 就会申请新空间; 如果是传统方式(conventional)插入, 就会使用当前释放的100G空间.

暂无图片 评论
暂无图片 有用 2
打赏 1
夜的第七章灬
2024-05-23
怎么判断当前是以哪种方式插入的?
广州_老虎刘
答主
2024-05-24
append有以下几种情况: insert /*+ append */ into t_dest select ... ; insert /*+ parallel(4) enable_parallel_dml */ into t_dest select ; insert /*+ append_values */ into t_dest values(); create table xxx as select .... 其他情况就是conventional
回答交流
Markdown


请输入正文
提交
相关推荐
连PDB数据库 TNSNAMES.ORA和LISTENER.ORA设置
回答 7
已采纳
1、如果你可以连接到cdb,就不用修改listener.ora了,这个文件对格式要求比较高,如果想修改可以参考官方文档上去修改。2、你的tnsnames.ora写的是对的,你先tnspingPDB1看
oracle数据库,怎么在查询语句中直接获取当前时间年月日格式???
回答 1
已采纳
selectmax(id)fromtwhereidlikeconcat(tochar(sysdate,‘yyyyMMdd’),’%’);
复制一台机A的ORACLE_HOME目录 和各种日志等等文件到另一台机B,这样复制过去的,可以启动数据库吗?
回答 2
如果是两边都是WINDOWS主机,这样也可以?ORACLE安装时不是写注册表,并且将ORACLE主要程序都注册成服务么?可能还要在PROGRAMFILES里写点东西吧。光复制ORACLEHOME,OR
oracle在查询返回的列中使用了listagg后为什么很慢
回答 3
先把逗号字段根据逗号拆开,再等值连接
oracle在计算gis方面用什么?
回答 1
已采纳
OracleSpatialOracleSpatial是Oracle数据库的空间扩展,提供了一套丰富的功能来存储、查询和分析地理空间数据。它支持存储和处理多种地理要素,如点、线、面、多边形、几何网络等
Oracle database与Oracle client安装在同一台机子上,出现sys账号登录不进去,是什么原因?
回答 5
你这怕是windows环境啊,环境变量有问题了,紧急的话建议把client卸载掉,环境变量里面的配置好好检查检查,装了oracle软件之后就不用装client了
Oracle 数据文件显示+data路径,如何在操作系统种找到对应的位置?
回答 3
已采纳
ASM了解一下https://www.modb.pro/db/63892
从oracle迁移到pg,有几百个表,有200多GB。怎么迁移速度快点?
回答 1
用ogg21c
ORA-03135
回答 1
1、客户端与数据库服务器之间的通信中断导致;2、如当时网络异常断开,数据库重启或者关闭等原因造成、DBLINK对应目标库之间的通信不稳定;3、重新登录,以便建立新的连接;附:03135,00000,"
oracle如何插入特殊符号
回答 6
已采纳
1.如果数据库是AL32UTF8,那么客户端环境变量也要设置成AL32UTF8NLSLANGSIMPLIFIEDCHINESECHINA.AL32UTF82.如果数据库是ZHS16GBK,那么这个字符