如何估计某表所占用的物理空间大小 想把一个库中的某些表迁移到另一个服务器上数据库中。如何估计这些表所占用的物理空间的大小,有哪些要考虑的影响因素,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --表空间SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比", F.TOTAL_BYTES "空闲空间(M)", F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY F.TABLESPACE_NAME;--数据文件select b.file_name 物理文件名,b.tablespace_name 表空间,b.bytes/1024/1024 大小M,(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M,substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.bytes order by b.tablespace_name select segment_name, bytes from dba_segments where owner = &USERNAME and segment_name = &tablename; -- 表已用空间和分配空间的大小select * from table(dbms_space.object_space_usage_tbf('owner','tablename','TABLE',NULL));-- 索引已用空间和分配空间的大小select * from table(dbms_space.object_space_usage_tbf('owner','indexname','INDEX',NULL)); 首先,按照表空间查询在绝大部分情况下是没有问题的,而且理论上移植过去的数据库只能比这个少不能比这个大,因为表空间运行过程中会产生很多碎片,导入导出时可以将碎片进行压缩,这些当然不是最重要的。如何查询表空间楼上已经有了答案,我这补充下我遇到过一些异常怪异的事情,以及其解决办法,因为ORACLE的BUG的确很多,理论上很多东西也未必是想要的,虽然这些解决办法可能不算办法,不过应该可以解决问题:1、目标数据库的块大小和原数据库的块大小不一致,此时可能会导致表空间的一些问题,我们当时搞定的方法就是弄成一样的,要么就做DB-LINK,将数据直接用移植过去,或者用COPY将数据复制过去。2、原数据库中有大量非常庞大的存储过程、包、包体,他们之间还相互调用,我们在一次ORACLE 10G的移植中遇到过一个用户下有14万行过程代码,其它用户差不多2万到6万不等,这可能算是某些情况下触发了ORACLE的BUG,具体我还没有细节原理和为什么还没有研究过,我们当时导出的时候就发现过程需要导半天才能倒出来(就单独的导那个用户,比所有的生产表花的时间还要长),当导入的时候发现表空间每秒以几十兆的速度向上飙升,而命令行下显示没有几条数据被导入;我当时没有尝试用压缩是否可以解决,不过我尝试了一个不是办法的办法,将表部分移植过去,过程部分全部用脚本,搞定了这件事情。 sql语句请教 有难度的sql文,请指教!!!!急,在线等。。。。。。 偶是菜鸟,看看这个关联删除的sql能不能优化一下? 问个简单的plsql脚步块,怎么会报错呢? 启动tomcat ,dos窗口直接闪断 日期型字段插入数据。 oracle数据库的两个弱智问题 关于数据库当中跨用户建立触发器 LRM-00109 怎么解决 菜鸟求大神帮忙 PLSQL关于游标取数据的问题 Oracle11G初体验小问题! 关于oracle中一个存储过程的问题
SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比", F.TOTAL_BYTES "空闲空间(M)", F.MAX_BYTES "最大块(M)"
FROM
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY F.TABLESPACE_NAME;--数据文件
select
b.file_name 物理文件名,
b.tablespace_name 表空间,
b.bytes/1024/1024 大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_name,b.bytes
order by b.tablespace_name
-- 表已用空间和分配空间的大小
select * from table(dbms_space.object_space_usage_tbf('owner','tablename','TABLE',NULL));-- 索引已用空间和分配空间的大小
select * from table(dbms_space.object_space_usage_tbf('owner','indexname','INDEX',NULL));