Sql Oracle:用于确定一个或多个架构从表空间消耗的存储的查询?

Sql Oracle:用于确定一个或多个架构从表空间消耗的存储的查询?,sql,oracle,schema,tablespace,Sql,Oracle,Schema,Tablespace,在Oracle12c中,我试图找到一个Oracle SQL查询,该查询可以确定一个或多个模式从特定表空间消耗了多少总存储 注意:我不需要知道可用空间,只需要知道这些特定模式一起消耗的空间 提前感谢。我相信您需要的数据是DBA_段。例如,您可以在“用户”表空间中列出所有具有对象的模式,如下所示: select tablespace_name, owner , round(sum(bytes) / (1024*1024) , 1) mb_used_in_ts from dba_segments wh

在Oracle12c中,我试图找到一个Oracle SQL查询,该查询可以确定一个或多个模式从特定表空间消耗了多少总存储

注意:我不需要知道可用空间,只需要知道这些特定模式一起消耗的空间


提前感谢。

我相信您需要的数据是DBA_段。例如,您可以在“用户”表空间中列出所有具有对象的模式,如下所示:

select tablespace_name, owner
, round(sum(bytes) / (1024*1024) , 1) mb_used_in_ts
from dba_segments
where 1=1
  and tablespace_name = 'USERS'
group by tablespace_name, owner
;
下面的查询比您要求的要多一些,但您会发现它很有用:

with ts_name as
(
select 'DEFAULT' tablespace_type
, DEFAULT_TABLESPACE tablespace_name
from dba_users where username = upper(:username)
union
select 'INDEX'  tablespace_type
, substr(default_tablespace, 1, instr(default_tablespace, '_DATA'))||'INDEX' tablespace_name
from dba_users where username = upper(:username)
union
select 'Data?'  tablespace_type
, upper(:username) || '_DATA' tablespace_name
from dual 
union
select 'Index?'  tablespace_type
, upper(:username) || '_INDEX' tablespace_name
from dual 
union
select ':tablespace input'  tablespace_type
,  upper(:tablespace)  tablespace_name
from dual 
union
select ':tablespace2 input'  tablespace_type
,  upper(:tablespace2)   tablespace_name
from dual 
)
SELECT to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') date_checked
, df.tablespace_name "Tablespace"
, nvl(totalusedspace, 0) "Used MB"
, nvl((df.totalspace - tu.totalusedspace), df.totalspace) "Free MB"
, df.totalspace "Total MB"
, nvl(ROUND (100 * ((df.totalspace - tu.totalusedspace) / df.totalspace)), 100) "Pct. Free"
, (select SEGMENT_SPACE_MANAGEMENT 
   from dba_tablespaces a
  where a.tablespace_name = df.tablespace_name) SEGMENT_SPACE_MANAGEMENT
FROM (SELECT   tablespace_name, ROUND (SUM (BYTES) / (1024*1024)) 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 (+)
   AND df.tablespace_name in (select tablespace_name from ts_name) 
order by 6 
;

使用
dba_段
视图,例如:

select owner, sum(bytes)
from dba_segments
where tablespace_name = 'MYTABLESPACE'
group by owner
order by sum(bytes) desc;
owner
列是拥有分配了一些存储空间的对象的架构名称

您还可以按对象类型(例如表、索引)进一步细分结果:

并进一步按对象名称:

select segment_name, sum(bytes)
from dba_segments
where tablespace_name = 'MYTABLESPACE'
and owner = 'MYSCHEMA'
and segment_type = 'TABLE'
group by segment_name
order by sum(bytes) desc;

这回答了你的问题吗@特贾什:不是。我需要知道一个或多个模式占用了多少空间。不是表空间的可用空间。不确定我是否完全正确理解了这个查询,但我想看看是否可以从单个表空间而不是多个表空间中获取一个或多个架构的存储信息。@Phillip我相信你想知道谁都使用一个表空间以及他们使用了多少表空间。请参见编辑原始答案。
select segment_name, sum(bytes)
from dba_segments
where tablespace_name = 'MYTABLESPACE'
and owner = 'MYSCHEMA'
and segment_type = 'TABLE'
group by segment_name
order by sum(bytes) desc;