当前位置: 首页 > 面试题库 >

当存储为BINARY XML时,Oracle XMLType有多大

汲睿
2023-03-14
问题内容

Oracle文档声称它将XMLType存储为BINARY XML比存储CLOB更紧凑。但是,如何找出二进制xml占用了多少空间?

CREATE TABLE t (x XMLTYPE) XMLTYPE x STORE AS BINARY XML;

SELECT vsize(x), dbms_lob.getlength(XMLTYPE.getclobval(x)) FROM t;

94 135254
94  63848
94  60188

因此,vsize似乎是某种指针或LOB定位器的大小,并将getclobval二进制XML解压缩为文本。但是二进制XML本身的存储大小如何?

请帮助,表大小为340GB,因此值得研究存储选项…


问题答案:

Oracle二进制XML格式对应于缩写为CSX的“紧凑型模式感知XML格式”。编码数据存储为BLOB字段。有关二进制XML格式的详细信息,可从Oracle文档中获得(此处和此处)。

数据字段的实际大小取决于XMLType列的LOB存储参数。例如,如果storage in row启用了该选项,则小型文档将直接与其他数据一起存储并vsize()返回适当的值。

实际上,Oracle使用系统名称创建底层的BLOB列,可以通过查询user_tab_cols视图找到该列:

select table_name, column_name, data_type 
from user_tab_cols 
where 
  table_name = 'T' and hidden_column = 'YES'
  and
  column_id = (
      select column_id 
      from user_tab_cols 
      where table_name = 'T' and column_name = 'X'
  )

此查询返回看起来像的系统隐藏列名称SYS_NC00002$

之后,可以通过dbms_lob.getlength()对隐藏列的常规调用来获取字段的大小:

select dbms_lob.getlength(SYS_NC00002$) from t


 类似资料:
  • 我想使用Spring LDAP 设置多个 LDAP 存储库。我的目标是同时在所有存储库中创建或更新对象。 我使用LdapRepository Spring接口,我认为目前这是不可能的。 我想知道我是否可以创建自己的LdapRepository来扩展Spring,但是我不知道如何开始。 这是我的配置: 完整地说,一个存储库: 知道怎么做吗? 提前感谢任何帮助。

  • 问题内容: 我在sql server中创建了一个存储过程来馈送SSRS,以允许它接受多个值。我已经创建了它,当我在报表中使用它或在sql server中执行它时,出现以下错误消息。我有什么想念的吗?谢谢 这是我的示例数据。随时使用它创建表 这是我的动态存储过程代码 谢谢 错误的梅格 问题答案: 还有另一种方法可以做到这一点。为何不使用函数拆分参数,而不是将值传递给动态查询? 一旦选择了其中一个功能

  • 我有一个新的alfresco社区版本5.0。安装。我正在尝试使用java连接器服务上载/下载与4.2兼容的文件。c露天安装。 此连接器应用程序使用chemistry-opencmis-client-api-0.8.0。 使用连接器上载文件时,我打开连接,获取存储库,还可以正确获取存储库根文件夹id: 然后创建会话: 但是当我想获取根文件夹对象时: 我收到“CmisObjectNotFoundExc

  • 在第一次评估Artifactory之后,我发现在进行初始设置并选择Maven和Gradle集成时,它为我创建了两组存储库,这让我感到困惑 平台-gradle-dev-local 平台-分级-发布-本地 平台-libs-release-local 平台-libs-snapshot-local 有什么理由使用两个gradle repos,或者我可以对所有构建都使用标准的Maven repos吗?Gra

  • 如何从 Firebase 存储中检查已用文件大小?如果我的存储空间已接近极限,是否有任何通知?