问题描述
我在Oracle 19c中创建了一个带有SecureFiles CLOB的表。我有一个程序从文件系统上的文本文件填充CLOB。执行填充例程后,我查看了CLOB段的大小,它是2560 Mb。文件大小本身的总和大约是该大小的一半。
因此,似乎段大小是文件大小的两倍。我更改了CREATE TABLE命令上的RETENTION参数以使用RETENTION MIN 60,以查看这是否会减少CLOB使用的空间量。这没有效果。段大小仍然是2560 Mb。
我的问题是: 我知道Oracle文档指出,撤消的CLOB段本身存储在CLOB段中。但是为什么它是文件大小的两倍?我可以做些什么来减少存储量吗?有没有办法确定多少CLOB段空间是实际的CLOB值与撤消空间?
因此,似乎段大小是文件大小的两倍。我更改了CREATE TABLE命令上的RETENTION参数以使用RETENTION MIN 60,以查看这是否会减少CLOB使用的空间量。这没有效果。段大小仍然是2560 Mb。
我的问题是: 我知道Oracle文档指出,撤消的CLOB段本身存储在CLOB段中。但是为什么它是文件大小的两倍?我可以做些什么来减少存储量吗?有没有办法确定多少CLOB段空间是实际的CLOB值与撤消空间?
专家解答
它与您的保留无关,但与您的字符集有关。
如果您的数据库具有可变宽度的特征集 (UTF-8等),那么我们将在所有情况下以UCS-2 (UTF-16) 格式存储clob。
你也可以在数据库之外看到这一点:
这里我有一个标准的文本文件:
我打开该文件并选择将其保存为UTF-16格式,结果文件现在是:
如果您的数据库具有可变宽度的特征集 (UTF-8等),那么我们将在所有情况下以UCS-2 (UTF-16) 格式存储clob。
你也可以在数据库之外看到这一点:
这里我有一个标准的文本文件:
C:\>dir c:\temp\file1.txt Volume in drive C is OS Volume Serial Number is 66D0-4AB5 Directory of c:\temp 15/01/2020 03:00 PM 1,000,000 file1.txt
我打开该文件并选择将其保存为UTF-16格式,结果文件现在是:
C:\>dir c:\temp\file1* Volume in drive C is OS Volume Serial Number is 66D0-4AB5 Directory of c:\temp 15/01/2020 03:00 PM 1,000,000 file1.txt 15/01/2020 03:09 PM 2,000,000 file1u.txt
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




