oracle表空间查询的基本SQL

查询一般表空间:
SELECT a.tablespace_name "表空间名",
       total 表空间大小,
       free 表空间剩余大小,
       (total - free) 表空间使用大小,
       ROUND((total - free) / total, 4) * 100 "使用率 %"
  FROM (SELECT tablespace_name, SUM(bytes) free
          FROM DBA_FREE_SPACE
         GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes) total
          FROM DBA_DATA_FILES
         GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
   and a.tablespace_name = '查询的表空间名称'

查询临时表空间:
SELECT a.tablespace_name "表空间名",
       total 表空间大小,
       total-used 表空间剩余大小,
       used 表空间使用大小,
       ROUND(used / total, 4) * 100 "使用率 %"
  FROM (SELECT tablespace_name, SUM(bytes_used) used
          FROM v$temp_space_header
         GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes) total
          FROM dba_temp_files
         GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
   and a.tablespace_name = '查询的临时表空间名称'
                            
                            
======================================================
下面介绍Oracle查询用户表空间                                                         
                                                                           
                                                                           
查看当前用户的缺省表空间 select username,default_tablespace from user_users                          
                                                                           
查看当前用户的角色 select * from user_role_privs 查看当前用户的系统权限                              
                                                                           
Oracle查询用户表空间:select * from user_all_tables                                                  
                                                                  
Oracle查询所有函数和储存过程:select * from user_source                                              
                                                                  
Oracle查询所有用户:select * from all_users.select * from dba_users                                  
                                                                  
Oracle查看当前用户连接:select * from v$Session                                                   
                                                                  
Oracle查看当前用户权限:select * from session_privs  
================================================================

1.查询oracle表空间的使用情况

select b.file_id  文件ID,
  b.tablespace_name  表空间,
  b.file_name     物理文件名,
  b.bytes       总字节数,
  (b.bytes-sum(nvl(a.bytes,0)))   已使用,
  sum(nvl(a.bytes,0))        剩余,
  sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
  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.file_id,b.bytes
  order by b.tablespace_name



2.查询oracle系统用户的默认表空间和临时表空间

select username,default_tablespace,temporary_tablespace from dba_users



3.查询单张表的使用情况

select segment_name,bytes from dba_segments where segment_name = 'RE_STDEVT_FACT_DAY' and owner = USER

RE_STDEVT_FACT_DAY是您要查询的表名称



4.查询所有用户表使用大小的前三十名

select * from (select segment_name,bytes from dba_segments where owner = USER order by bytes desc ) where rownum <= 30



5.查询当前用户默认表空间的使用情况

select tablespacename,sum(totalContent),sum(usecontent),sum(sparecontent),avg(sparepercent)
from
(
SELECT b.file_id as id,b.tablespace_name as tablespacename,b.bytes as totalContent,(b.bytes-sum(nvl(a.bytes,0))) as usecontent,sum(nvl(a.bytes,0)) as sparecontent,sum(nvl(a.bytes,0))/(b.bytes)*100  as sparepercent
FROM dba_free_space a,dba_data_files b
WHERE a.file_id=b.file_id and b.tablespace_name = (select default_tablespace from dba_users where username = user) 
group by b.tablespace_name,b.file_name,b.file_id,b.bytes
)
GROUP BY tablespacename



6.查询用户表空间的表

select   *  from user_tables

=============================================================================
1.查询用户(数据)表空间

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 4 DESC



2.查询临时表空间

SELECT d.status "Status", d.tablespace_name "Name", d.CONTENTS "Type",
d.extent_management "Extent Management",
TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.900') "Size (M)",
TO_CHAR (NVL (t.BYTES, 0) / 1024 / 1024, '99999999.999')
|| '/'
|| TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99999999.999') "Used (M)",
TO_CHAR (NVL (t.BYTES / a.BYTES * 100, 0), '990.00') "Used %"
FROM SYS.dba_tablespaces d,
(SELECT tablespace_name, SUM (BYTES) BYTES
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM (bytes_cached) BYTES
FROM v$temp_extent_pool
GROUP BY tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management LIKE 'LOCAL'
AND d.CONTENTS LIKE 'TEMPORARY'

-- 收缩临时表空间
alter tablespace tbs_mk_temp coalse;


3.查询某个用户下表 占用的空间
select t.segment_name,sum(t.bytes)/1024/1024
from user_segments t
where segment_name like 'TB%'
group by t.segment_name
order by sum(t.bytes)/1024/1024 desc


4.查询表是否是分区表 ,占用的大小
select *
from user_segments t
where segment_name like 'TB%'
and t.segment_name='TB_FI_FIG_WINNER_CUST_MON'

5.查询 被锁的进程(dba登录)

select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name,ao.object_name, sess.LOGON_TIME,lo.locked_mode
from v$locked_object lo,dba_objects ao,v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid
order by sess.LOGON_TIME;


6. 杀掉被锁的进程

alter system kill session '1997,33097';

猜你喜欢

转载自xinyoulinglei.iteye.com/blog/1725747