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尾部。
參考
查詢oracle clob占用空間腳本
Oracle統計每條數據的大小
DBMS_LOB
Oracle - DBMS_LOB函數和用法