临时表空间相关

--临时表空间的使用率
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",
ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
NVL(FREE_SPACE,0) "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES)/(1024*1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES_USED)/(1024*1024*1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024*1024),2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
--清理临时段
select ts#, name FROM v$tablespace;
select ts#, name from sys.ts$ ;
--下面的30是ts#
alter session set events 
'immediate trace name DROP_SEGMENTS level 30';
--查看临时表空间的使用
select
inst_id,
username,
session_num,
b.sql_id,
tablespace,
segtype,
sum(blocks)*8/1024/1024 size_in_gb,
b.SQL_TEXT
FROM
gV$TEMPSEG_USAGE a,v$sql  b
WHERE a.SQL_ID=b.SQL_ID(+) 
group by
inst_id,
username,
session_num,
b.sql_id,
tablespace,
segtype,b.SQL_TEXT
ORDER BY SIZE_IN_GB DESC
--查看临时表空间的使用
select a.username,
       a.sql_id,
       a.SEGTYPE,a.TABLESPACE,c.SQL_TEXT,
       sum(b.BYTES_USED)/1024/1024/1024||'G',
 sum(b.BYTES_FREE)/1024/1024/1024  from  
 V$TEMPSEG_USAGE  a  join  
V$TEMP_SPACE_HEADER b on   a.TABLESPACE=b.tablespace_name
        left join v$sql  c on a.SQL_ID=c.SQL_ID
        
       group by a.username,
       a.sql_id,
       a.SEGTYPE,a.TABLESPACE,c.SQL_TEXT

表空间查询

--表空间查询

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, 5 ASC;

收缩表空间

--收缩表空间-查询水位线
select
 tablespace_name,
 file_id,
 file_name DATA_FILE_NAME,
 Allocated_MBYTES,
 High_Water_Mark_MBYTES,
 FREE_MBYTES,
 trunc((FREE_MBYTES / Allocated_MBYTES) * 100, 2) "% Free",
 trunc(Allocated_MBYTES - High_Water_Mark_MBYTES, 2) Resizeble
  from (
        select 
         ddf.tablespace_name tablespace_name,
          ddf.file_id file_id,
          ddf.file_name file_name,
          ddf.bytes / 1024 / 1024 Allocated_MBYTES,
          trunc((ex.hwm * (dt.block_size)) / 1024 / 1024, 2) High_Water_Mark_MBYTES,
          FREE_MBYTES
          from dba_data_files ddf,
                dba_tablespaces dt,
                (
                 select file_id, sum(bytes / 1024 / 1024) FREE_MBYTES
                   from dba_free_space
                  group by file_id
                 ) free,
                (
                 select file_id, max(block_id + blocks) hwm
                   from dba_extents
                  group by file_id
                 ) ex
         where ddf.file_id = ex.file_id
           and ddf.tablespace_name = dt.tablespace_name
           and ddf.file_id = free.file_id(+)
         order by ddf.tablespace_name, ddf.file_id
        )
        where tablespace_name='RPT'
        ;
   --2收缩表空间     
        
select 'alter database datafile ''' || a.file_name || ''' resize ' ||
round(a.filesize - (a.filesize - c.hwmsize - 100) * 0.8) || 'M;',
a.filesize || 'M' as "数据文件的总大小",
c.hwmsize || 'M' as "数据文件的实用大小"
from (select file_id, file_name, round(bytes / 1024 / 1024) as filesize
from dba_data_files) a,
(select file_id, round(max(block_id) * 8 / 1024) as HWMsize
from dba_extents
group by file_id) c
where a.file_id = c.file_id
and a.filesize - c.hwmsize > 100
;       
        
--查看占用段
select segment_name, block_id from dba_extents where tablespace_name='RPT' order by block_id desc
--降低表的水位线
alter table 表 shrink space; 
ALTER DATABASE DATAFILE '/data/t_data05.dbf' RESIZE 63M;

long类型字段转换

--带'<','>'无法转换
--xml提取
 with xml as (
select dbms_xmlgen.getxmltype('select table_name, partition_name, high_value from dba_tab_partitions where table_name = '''||tabName||'''') as x
from dual
)
select
extractValue(rws.object_value, '/ROW/PARTITION_NAME')  partition_name
from xml x,
table(xmlsequence(extract(x.x, '/ROWSET/ROW'))) rws
where to_char(substr(extractValue(rws.object_value, '/ROW/HIGH_VALUE'),11,10)) >=to_char(add_months(trunc(sysdate,'mm'),-1),'yyyy-mm-dd')
and  to_char(substr(extractValue(rws.object_value, '/ROW/HIGH_VALUE'),11,10))<=to_char(add_months(sysdate-1,+1),'yyyy-mm-dd')
 ORDER BY substr(extractValue(rws.object_value, '/ROW/HIGH_VALUE'),11,10)
posted on 2022-05-16 18:45  xc川  阅读(38)  评论(0)    收藏  举报