作为IT工程师,在Oracle数据库中查询数据大小有多种工具和方法可供选择。以下是几种常用的方法:
SELECT
tablespace_name,
ROUND(SUM(bytes)/1024/1024,2) "Size (MB)",
ROUND(SUM(bytes)/1024/1024/1024,2) "Size (GB)"
FROM dba_data_files
GROUP BY tablespace_name;
SELECT
df.tablespace_name "表空间",
df.bytes/1024/1024 "总大小(MB)",
(df.bytes-fs.bytes)/1024/1024 "已使用(MB)",
fs.bytes/1024/1024 "空闲(MB)",
ROUND(100*(df.bytes-fs.bytes)/df.bytes) "使用率(%)"
FROM
(SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) df,
(SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) fs
WHERE df.tablespace_name = fs.tablespace_name;
SELECT
segment_name "表名",
segment_type "类型",
ROUND(bytes/1024/1024,2) "大小(MB)"
FROM user_segments
WHERE segment_name = '表名';
SELECT
owner "所有者",
segment_name "段名",
segment_type "类型",
ROUND(bytes/1024/1024,2) "大小(MB)"
FROM dba_segments
WHERE owner = '用户名'
ORDER BY bytes DESC;
-- 表空间使用情况详细分析
SET SERVEROUTPUT ON
DECLARE
v_total_mb NUMBER;
v_used_mb NUMBER;
v_free_mb NUMBER;
v_pct_used NUMBER;
BEGIN
DBMS_OUTPUT.PUT_LINE('表空间使用情况分析:');
DBMS_OUTPUT.PUT_LINE('----------------------------------');
FOR ts IN (SELECT tablespace_name FROM dba_tablespaces) LOOP
-- 计算总大小
SELECT SUM(bytes)/1024/1024 INTO v_total_mb
FROM dba_data_files
WHERE tablespace_name = ts.tablespace_name;
-- 计算空闲空间
SELECT NVL(SUM(bytes)/1024/1024,0) INTO v_free_mb
FROM dba_free_space
WHERE tablespace_name = ts.tablespace_name;
-- 计算已使用空间
v_used_mb := v_total_mb - v_free_mb;
v_pct_used := ROUND((v_used_mb / v_total_mb) * 100, 2);
DBMS_OUTPUT.PUT_LINE('表空间: ' || ts.tablespace_name);
DBMS_OUTPUT.PUT_LINE('总大小: ' || v_total_mb || ' MB');
DBMS_OUTPUT.PUT_LINE('已使用: ' || v_used_mb || ' MB (' || v_pct_used || '%)');
DBMS_OUTPUT.PUT_LINE('空闲: ' || v_free_mb || ' MB');
DBMS_OUTPUT.PUT_LINE('----------------------------------');
END LOOP;
END;
/
sql
@?/rdbms/admin/awrrpt.sql
-- 查询表空间历史增长趋势
SELECT
snap_id,
TO_CHAR(begin_interval_time, 'YYYY-MM-DD HH24:MI') "时间",
tablespace_name,
tablespace_size/1024/1024 "总大小(MB)",
tablespace_usedsize/1024/1024 "已使用(MB)"
FROM dba_hist_tbspc_space_usage a
JOIN dba_hist_snapshot b ON a.snap_id = b.snap_id
WHERE tablespace_name = '表空间名'
ORDER BY snap_id;
以上方法可以根据具体需求选择使用,对于日常监控,建议结合自动化脚本和Oracle Enterprise Manager等图形化工具进行综合管理。