獲取Oracle表大小的三種方法
更新時間:2025年04月03日 10:48:40 作者:愿與貍花過一生
在 Oracle 數(shù)據(jù)庫中,獲取表的大小可以通過查詢數(shù)據(jù)字典視圖 DBA_SEGMENTS、USER_SEGMENTS 或 ALL_SEGMENTS,具體取決于你的權限范圍和需求,本文通過代碼示例介紹的非常詳細,需要的朋友可以參考下
直接查詢段大小
表的存儲空間信息存儲在段(Segment)中,通過以下 SQL 可以獲取表的大小(包含數(shù)據(jù)、索引、LOB 等占用的空間)
SELECT segment_name AS table_name, bytes, ROUND(bytes / 1024 / 1024, 2) AS size_mb FROM user_segments -- 根據(jù)權限替換為 dba_segments 或 all_segments WHERE segment_type = 'TABLE' AND segment_name = 'AI_TOOLS';
確保表名使用大寫,因為 Oracle 數(shù)據(jù)字典默認存儲大寫對象名。
bytes
字段表示分配的存儲空間,可能包含未使用的塊。若表有分區(qū),需查詢
DBA_TAB_PARTITIONS
視圖獲取各分區(qū)大小。
計算表數(shù)據(jù)估算大?。ɑ诮y(tǒng)計信息)
結合 DBA_TABLES
中的行數(shù)和平均行長估算數(shù)據(jù)量(需更新統(tǒng)計信息):
BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname => 'NEW_USER', tabname => 'AI_TOOLS' ); END; / SELECT table_name, num_rows, avg_row_len, ROUND((num_rows * avg_row_len) / 1024 / 1024, 2) AS estimated_size_mb FROM user_tables WHERE table_name = 'AI_TOOLS';
匯總表及索引的總大小
SELECT 'TABLE' AS segment_type, segment_name, bytes AS table_size_bytes, ROUND(bytes / 1024 / 1024, 2) AS table_size_mb FROM user_segments WHERE segment_type = 'TABLE' AND segment_name = 'YOUR_TABLE_NAME' UNION ALL SELECT 'INDEX' AS segment_type, segment_name, bytes AS index_size_bytes, ROUND(bytes / 1024 / 1024, 2) AS index_size_mb FROM user_segments WHERE segment_type = 'INDEX' AND segment_name IN ( SELECT index_name FROM user_indexes WHERE table_name = 'YOUR_TABLE_NAME' );
到此這篇關于獲取Oracle表大小的三種方法的文章就介紹到這了,更多相關獲取Oracle表大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!