Oracle10g 找出表空间中每个表的大小?

Oracle10g 找出表空间中每个表的大小?,oracle10g,Oracle10g,我想在oracle 10g中找出特定表空间中所有表的大小 O/p应指定每个用户当前占用的大小 桌子如果表中有blob字段,则应包括blob字段的大小, 此外,它还应包括该表中任何索引的大小 我目前正在使用此查询,但它不包括索引的大小,也不确定是否包括blob大小 select TABLE_NAME, ROUND((AVG_ROW_LEN * NUM_ROWS / 1024), 2) ROW_SIZE_KB, (BLOCKS * 8) BLOCK_SIZE_KB from USER_TABL

我想在oracle 10g中找出特定表空间中所有表的大小

O/p应指定每个用户当前占用的大小 桌子如果表中有blob字段,则应包括blob字段的大小, 此外,它还应包括该表中任何索引的大小

我目前正在使用此查询,但它不包括索引的大小,也不确定是否包括blob大小

select TABLE_NAME, ROUND((AVG_ROW_LEN * NUM_ROWS / 1024), 2) ROW_SIZE_KB, (BLOCKS * 8)  BLOCK_SIZE_KB  
from USER_TABLES  
order by TABLE_NAME
建议

如果有人能写一些查询,给出表中每个字段的大小,以及表的总大小和表上每个索引的大小(如果有的话),那就太好了

编辑: 我真正想要的是:我想知道表实际占用的空间,我的数据实际占用的空间。不是空的空间。如果有任何索引,那么是索引的大小,而不是oracle为将来使用保留的额外字节

动机: 我已经使用SSMA将一些数据库从oracle移动到SQLServer2008。我面临的问题是,数据库的大小已从80GB(在oracle中)减少到20GB(在SqlServer中)。我使用了这个查询:

SELECT
  /* + RULE */
  df.tablespace_name "Tablespace",
  df.bytes / (1024*1024*1024) "Size(GB)",
  SUM(fs.bytes) / (1024*1024*1024) "Free(GB)",
  NVL(ROUND(SUM(fs.bytes) * 100 / df.bytes),1) "%Free",
  ROUND((df.bytes         - SUM(fs.bytes)) * 100 / df.bytes) "%Used"
FROM dba_free_space fs,
  (SELECT tablespace_name,
    SUM(bytes) bytes
  FROM dba_data_files
  WHERE tablespace_name not like 'SCN%'
  GROUP BY tablespace_name
  ) df
WHERE fs.tablespace_name (+) = df.tablespace_name 
GROUP BY df.tablespace_name, df.bytes
order by 3 desc

现在,我想做的是,由于存在这种缩减,我想在表空间下比较表中的数据。这就是问题的原因。

函数返回大多数列的内部表示形式中的字节数
DBMS\u LOB.GETLENGTH
返回LOB的字节数或字符数。

从一个表中选择vsize(不是一个lob列)、DBMS\U lob.GETLENGTH(一个lob列);
《Oracle数据库应用程序开发人员指南-大型对象》指南提供了有关DBMS_LOB包的更多信息。
这两个函数都不包括每列开销的字节(3表示大VARCHAR)。

以获取分配的总空间。
从用户_段中选择字节,其中段_名称='表_名称';

对每个索引重复此操作。这将为您提供分配的空间,包括为将来的插入和更新保留的空间。

检查索引和表的大小

选择substr(段名称,1,30)段名称,字节/1024/1024“大小以MB为单位” 从用户_段 其中段名称在(‘表名称’)中


Arvind Kumar

这个问题有很多可能的答案,这取决于您所说的“表当前占用的大小”:例如,一个表在一个表空间中可以分配1000个扩展数据块,而只使用900个扩展数据块;此外,这900个数据块中的许多数据块可能仅部分填充了数据(例如,由于删除了行);然后,由于PCT_自由设置、更新和删除,每个块中都有空的空间。您需要说明为什么需要大小,以便为您正试图解决的确切问题获得正确答案。我需要表中数据所消耗的实际空间,而不是空空间..我也需要知道。。你找到逻辑了吗。。?有任何更新吗?此脚本不执行任何操作。 select vsize(not_a_lob_col), DBMS_LOB.GETLENGTH(a_lob_col) from a_table; select bytes from user_segments where segment_name = 'TABLE_NAME';