1. Oracle统计数据的大小
1,vsize()
统计每个字段的实际占用长度,统计的是单条记录的长度
2,DBMS_LOB.getlength()
统计BLOBs, CLOBs, and NCLOBs的字段实际占用长度,统计的是单条记录的长度
3,从聚合统计表里查
select AVG_ROW_LEN, T.* from DBA_TABLES T where table_name = 'WEB_ISC_DATA';
范例
---查看Oracle中表空间及表数据大小
SELECT SEGMENT_NAME,
(SUM(BYTES) / 1024 / 1024 / 1024) || 'GB' AS TABLE_SIZE
FROM USER_EXTENTS
GROUP BY SEGMENT_NAME
ORDER BY TABLE_SIZE DESC
---查询指定表中clob字段对应的数据库段segment_name
SELECT * FROM DBA_LOBS WHERE OWNER ='ZSSYS' AND TABLE_NAME ='WEB_ISC_DATA'
---数据库段segment_name所对应的字段存库占用空间大小
SELECT ROUND(S.BYTES / 1024 / 1024 / 1024) size_gb, S.* FROM dba_segments S WHERE segment_name='SYS_LOB0000137536C00005$$';
---范例:按照单日统计数据条数,某个LOB字段占用磁盘的大小
SELECT C_INTERFACE_ID,
(SELECT C_BIZ_NAME
FROM ZSSYS.WEB_ISC_INTERFACE_REG
WHERE C_PK_ID = C_INTERFACE_ID) C_INTERFACE_ID,
DD,
COUNT(*),
SUM(DBMS_LOB.GETLENGTH(C_DATA)) / 1024 / 1024
FROM (SELECT C_INTERFACE_ID, TO_CHAR(T_CRT_TM, 'YYYY-MM-DD') AS DD, C_DATA
FROM ZSSYS.WEB_ISC_DATA D
WHERE T_CRT_TM > TRUNC(SYSDATE - 90))
GROUP BY C_INTERFACE_ID, DD ;
扩展:Oracle - DBMS_LOB函数和用法
DBMS_LOB包中主要提供了以下几个过程供用户对内部LOB字段进行维护:
APPEND: 将源LOB中的内容加到目的LOB中。
CLOSE: 关闭已经打开的LOB。
CREATETEMPORARY: 在用户的临时表空间中,建立临时LOB。
FILECLOSE: 关闭打开的BFILE定位符所指向的OS文件。
FILECLOSEALL: 关闭当前会话已经打开的所有BFILE文件。
FILEEXISTS: 确定file_loc对应的OS文件是否存在,1:存在。0:不存在。
FILEGETNAME: 获取BFILE定位符所对应的目录别名和文件名。
FILEISOPEN: 确定BFILE对应的OS文件是否打开。
FREETEMPORA 释放在默认临时表空间中的临时LOB。
FILEOPEN: 打开文件。
GETCHUNKSIZE: 当建立包含CLOB/BLOB列的表时,通过指定CHUNK参数可以指定操纵LOB需要分配的字节数(数据库尺寸的整数倍)默认为数据块的尺寸。
COPY: 从源LOB中复制数据到目的LOB。
ERASE: 删除LOB中全部或部分内容。
TRIM: 将LOB值减少到指定的长度。
WRITE: 向LOB中写入数据。
INSTR: 返回特定样式数据从LOB某偏移位置开始出现N次的具体位置。
IDOPEN: 确定LOB是否打开,打开:1,未打开:0。
ISTEMPORARY: 确定定位符是否为临时LOB。
LOADFROMFILE: 将BFILE的部分或全部内容复制到目标LOB变量。
LOADBLOBFROMFILE: 将BFILE数据装载到BLOB中,并且在装载后取得最新的偏移位置。
OPEN: 打开LOB,open_mode(只读:dbms_lob.lob_readonly,写:dbms_lob.lob_readwrite)。
COMPARE: 比较两个同种数据类型的LOB的部分或全部值是否相同。
GETLENGTH: 获取LOB的长度。
READ: 从LOB中读出数据。
SUBSTR: 与字符处理函数SUBSTR使用方法一样。
WRITEAPPEND: 将缓冲区数据写到LOB尾部。