Oracle:如何找出表使用的存储空间?

b.r*_*oth 12 oracle storage oracle10g

如何找出(如果可能的话,通过企业管理器)某个表正在使用的总数(以 Mb 为单位)?

Guy*_*Guy 17

通过 OEM 10g,

  1. 像往常一样连接到数据库
  2. 单击Schema选项卡
  3. Tables在数据库对象中的链接上
  4. 输入架构名称和对象名称(可选)并单击 Go
  5. 使用单选按钮选择要查看的表并单击Edit (不要单击表名链接)
  6. 单击Segments选项卡(并等待...)
  7. 您将看到表数据的大小和使用的索引。

好的,这在技术上回答了你的问题。但更好的方法是:

  1. 使用 SQLPLUS 登录
  2. 从 Vincent 运行脚本。

我喜欢将脚本保存t.sql为快速参考

COLUMN size_mb      FORMAT '999,999,990.0'
COLUMN num_rows     FORMAT '999,999,990'
COLUMN fmt_short    FORMAT A24


COLUMN owner        FORMAT A16
COLUMN table_name   LIKE fmt_short
COLUMN tablespace_name  LIKE fmt_short

SET LINESIZE 200
SET AUTOTRACE OFF

COMPUTE SUM OF size_mb ON REPORT
BREAK ON REPORT

SELECT 
    lower( owner )      AS owner
    ,lower(table_name)  AS table_name
    ,tablespace_name
    ,num_rows
    ,blocks*8/1024      AS size_mb
    ,pct_free
    ,compression 
    ,logging
FROM    all_tables 
WHERE   owner           LIKE UPPER('&1')
OR  owner           = USER
ORDER BY 1,2;

CLEAR COMPUTES
CLEAR BREAKS
Run Code Online (Sandbox Code Playgroud)


小智 13

表使用的空间是其所有盘区使用的空间:

SELECT SUM(bytes), SUM(bytes)/1024/1024 MB
    FROM dba_extents
    WHERE owner = :owner
    AND segment_name = :table_name;

SUM(BYTES)         MB
---------- ----------
3066429440   2924,375
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于没有 LOB 列的表。 (2认同)

Gun*_*dow 8

您确定使用 all_tables 视图的原始方法包括 LOB 范围吗?我想不会。这是我发现有用的一个:

with da as (
 SELECT owner, segment_name, SUM(bytes)/1024/1024 size_mb
   FROM dba_extents
   group by rollup(owner, segment_name)
) select owner, segment_name, size_mb, round(size_mb/total_mb*100)
  from da 
    cross join (
      select size_mb as total_mb 
      from da t where owner is null and segment_name is null
    )
order by size_mb desc
Run Code Online (Sandbox Code Playgroud)

它向我展示了使用最多空间的内容。