oracle 查詢指定用戶下每個表占用空間的大小,倒序顯示
使用場景:數據分析;導出醫院正式庫到開發環境時,查詢出占用表空間高的業務表、導出時排除該表
在Oracle數據庫中,要查詢指定用戶下每個表占用空間的大小并以倒序顯示,可以使用數據字典視圖DBA_SEGMENTS(或ALL_SEGMENTS,如果你有權限訪問這些視圖),結合DBA_TABLES(或ALL_TABLES)來獲取相關信息。下面是如何實現這一查詢的步驟:
說明:SUM(s.bytes) / 1024 / 1024 AS space_used_mb 這部分計算了總字節數并轉換為MB(兆字節),以便更直觀地顯示空間使用量。
1. 使用DBA_SEGMENTS和DBA_TABLES
如果你有DBA權限,可以使用DBA_SEGMENTS和DBA_TABLES視圖。這將提供該oracle實例下每個表的空間使用情況,但請注意,你需要有相應的權限。
SELECT t.owner,t.table_name,SUM(s.bytes) / 1024 / 1024 AS space_used_mb
FROM dba_segments s
JOIN dba_tables t ON s.owner = t.owner AND s.segment_name = t.table_name
WHERE s.segment_type = 'TABLE'AND t.owner = 'C##BBP402CYTJDEV41' -- 替換為你的用戶名-- and t.owner in('C##BBP402CYTJDEV41','C##AUDIT_USER') --或者使用in查詢多個用戶、如果不帶owner查詢條件、則查詢實例下所有表占用空間
GROUP BY t.owner, t.table_name
ORDER BY space_used_mb DESC;
2. 使用USER_SEGMENTS和USER_TABLES(僅限當前用戶)
如果你只想查看當前用戶(schema)下的表空間使用情況,可以使用USER_SEGMENTS和USER_TABLES視圖。
SELECT t.table_name,SUM(s.bytes) / 1024 / 1024 AS space_used_mb
FROM user_segments s
JOIN user_tables t ON s.segment_name = t.table_name
WHERE s.segment_type = 'TABLE'
GROUP BY t.table_name
ORDER BY space_used_mb DESC;