新手警报:如何确定我在Oracle 11g数据库中使用多少存储空间?

时间:2016-09-29 19:39:26

标签: oracle11g storage

技术高手 -

我正在将Oracle 11g数据库迁移到MS SQL Server 2012实例。在我开始从11g到MSSQL的数据的实际物理副本之前,我如何确定我需要留出什么样的空间?在Oracle SQL Developer中,我能够在SQL会话中找到Statistics选项卡。我看到这个标签可能会给我一些我正在寻找的高级/粗略概念版本 - 但是,我有几百个表格,所以这种方法看起来并不实用。有没有办法发出sql语句,或执行现有的存储过程来确定包含这些数据需要多少物理空间?

enter image description here

1 个答案:

答案 0 :(得分:1)

我保留的一些查询对本练习非常有用

找出表空间及其使用的空间

col "Tablespace" for a22
col "Used MB" for 99,999,999
col "Free MB" for 99,999,999
col "Total MB" for 99,999,999

select df.tablespace_name "Tablespace",
totalusedspace "Used MB",
(df.totalspace - tu.totalusedspace) "Free MB",
df.totalspace "Total MB",
round(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace))
"Pct. Free"
from
(select tablespace_name,
round(sum(bytes) / 1048576) TotalSpace
from dba_data_files 
group by tablespace_name) df,
(select round(sum(bytes)/(1024*1024)) totalusedspace, tablespace_name
from dba_segments 
group by tablespace_name) tu
where df.tablespace_name = tu.tablespace_name ;

从表空间中的表中获取存储空间

COLUMN TABLE_NAME FORMAT A20
COLUMN TABLESPACE_NAME FORMAT A20

SELECT
SUBSTR(s.segment_name,1,20) TABLE_NAME,
SUBSTR(s.tablespace_name,1,20) TABLESPACE_NAME,
ROUND(DECODE(s.extents, 1, s.initial_extent,
(s.initial_extent + (s.extents-1) * s.next_extent))/1024000,2) ALLOCATED_MB,
ROUND((t.num_rows * t.avg_row_len / 1024000),2) REQUIRED_MB
FROM
dba_segments s,
dba_tables t
WHERE
s.owner = t.owner AND
s.segment_name = t.table_name and
s.tablespace_name = '<yourtablespacename>'
ORDER BY 3 ASC;