我想在oracle 10g
中找出特定表空间中所有表的大小O / P应指定每个当前占用的大小 表。如果表中有任何内容,它应该包括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移动到SqlServer 2008。我面临的问题是数据库的大小已经从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
现在,我想要做的是,由于存在这种减少,我想到了比较表空间下表中的数据。这就是问题的原因。
答案 0 :(得分:3)
获取总分配空间。
select bytes from user_segments where segment_name = 'TABLE_NAME';
重复每个索引。这将为您提供分配的空间,包括为将来插入和更新保留的空间。
答案 1 :(得分:0)
vsize
函数返回大多数列的内部表示中的字节数。 DBMS_LOB.GETLENGTH
返回lob的字节数或字符数。
select vsize(not_a_lob_col), DBMS_LOB.GETLENGTH(a_lob_col) from a_table;
“Oracle数据库应用程序开发人员指南 - 大对象”指南提供了有关DBMS_LOB包的更多信息。
这两个函数都没有包含每列开销的字节(大变量3的字节)。
答案 2 :(得分:-1)
检查索引和表的大小
选择substr(segment_name,1,30)segment_name,bytes / 1024/1024“Size in MB” 来自user_segments 其中segment_name('TABLE_NAME');
Arvind Kumar