Oracle LOB列是否需要分区?

Oracle LOB列是否需要分区?,oracle,database-partitioning,lob,Oracle,Database Partitioning,Lob,我的老板担心,如果我们不对表进行分区并随时间推移删除分区(而不仅仅是删除记录),那么在数据库表中创建LOB列可能会导致有效的永久存储开销。他认为,在创建记录时,LOB的数据将单独存储,这似乎是正确的,但Oracle可能不会在删除行时删除LOB列的数据 这是正确的还是可能的?我发现很难相信DBMS会如此糟糕地处理对象存储。我们正在使用Oracle 11g,如果这能改变什么的话。我最终找到了它,它涵盖了相同的主题 当数据库创建存储LOB的扩展数据块时,它直接与表关联。删除包含这些LOB的行时,LOB

我的老板担心,如果我们不对表进行分区并随时间推移删除分区(而不仅仅是删除记录),那么在数据库表中创建LOB列可能会导致有效的永久存储开销。他认为,在创建记录时,LOB的数据将单独存储,这似乎是正确的,但Oracle可能不会在删除行时删除LOB列的数据

这是正确的还是可能的?我发现很难相信DBMS会如此糟糕地处理对象存储。我们正在使用Oracle 11g,如果这能改变什么的话。

我最终找到了它,它涵盖了相同的主题

当数据库创建存储LOB的扩展数据块时,它直接与表关联。删除包含这些LOB的行时,LOB将从保持相同大小的数据块中删除(不会因为删除了LOB而收缩)。但是,正如人们所期望的那样,该表能够重用删除的LOB中的空间

因此,虽然整个数据库无法重用为表的LOB存储创建的数据块中的可用空间,但该空间可供表使用。在删除或截断表或明确取消分配数据块之前,数据块将一直存在(因此会占用数据库完全可用的空间)


最后,除非剩余分配给表的数据块是一个问题(或者有其他问题可以通过分区解决),否则不需要为此目的单独创建分区。

从读取开始。请注意,较小的LOB(~4k字节或更小)通常以内联方式存储。它的存储/维护方式当然取决于您的设置和数据。我看过这个页面,只是再次浏览了一遍,没有看到太多关于如何/何时删除线外LOB的内容。不过,我有可能忽略了它。您认为是否有一个特定的部分涵盖了这一点?好的,如果LOB的存储方式不一致(在一个单独的段中,将在user_段中显示为LOBSEMENT type),则从表中删除不会取消分配扩展数据块。空间存在并且可用,但仍将被分配。为什么它不释放数据?正如ntalbs建议的那样,这似乎是资源泄漏。这更像是一个物理空间与逻辑空间的问题(比如从硬盘上删除一个文件实际上只是删除了对它的引用,而不是数据本身),还是Oracle实际上保留了LOB?该空间是否会被重新用于存储新数据?分配的数据块将保留在表中,直到删除或截断它。但是,该空间可用于表的未来数据。我认为您的老板希望对表进行分区,以便能够删除/截断分区,“释放”其他表/对象的空间。我认为,只要分区对数据及其维护方式有意义就可以了(不过,我不会因为这个原因而强制采用某些分区方案)。