wol*_*lφi 11 xml sql oracle oracle11gr2
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
Run Code Online (Sandbox Code Playgroud)
因此,vsize
似乎是某种指针或LOB定位器的大小,并将getclobval
二进制XML解包为文本.但是二进制XML本身的存储大小呢?
请帮忙,表大小为340GB,所以值得研究存储选项......
Thi*_*Jet 12
Oracle二进制XML格式对应于"Compact Schema Aware XML Format",缩写为CSX.编码数据存储为BLOB字段.有关Oracle文档(此处和此处)提供的二进制XML格式的详细信息.
数据字段的实际大小取决于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'
)
Run Code Online (Sandbox Code Playgroud)
此查询返回看起来像的系统隐藏列名称SYS_NC00002$
.
之后,可以通过dbms_lob.getlength()
针对隐藏列的常规调用来获取字段的大小:
select dbms_lob.getlength(SYS_NC00002$) from t
Run Code Online (Sandbox Code Playgroud)