用PLSQL procedure:
CREATE OR REPLACE PROCEDURE GET_TABLESPACE_USAGE (
m_limit in number default 0
)
AS
BEGIN
DECLARE
RunDate date;
DatabaseName v$database.name%type;
TabSpaceName dba_tablespaces.tablespace_name%type;
TabSpaceType dba_tablespaces.contents%type;
TotalSpace dba_data_files.bytes%type;
FreeSpace dba_free_space.bytes%type;
SumTotal dba_data_files.bytes%type;
SumFree dba_data_files.bytes%type;
SumUsed dba_data_files.bytes%type;
CURSOR name_cursor IS
select tablespace_name,contents from dba_tablespaces order by 1;
BEGIN
select sysdate into RunDate from dual;
select name into DatabaseName from v$database;
dbms_output.put_line ('Database : '|| DatabaseName);
dbms_output.put_line ('Run Date : '|| to_char(RunDate,'YYYY-MM-DD HH24:MI:SS'));
dbms_output.new_line;
dbms_output.new_line;
dbms_output.put_line
('--------------------------- --------- -------- -------- ----- -----');
dbms_output.put_line
('TableSpace Name Total (M) Used (M) Free (M) %Used %Free');
dbms_output.put_line
('--------------------------- --------- -------- -------- ----- -----');
SumTotal := 0;
SumFree := 0;
SumUsed := 0;
FOR name_cursor_rec IN name_cursor LOOP
TabSpaceName := name_cursor_rec.tablespace_name;
TabSpaceType := name_cursor_rec.contents;
if TabSpaceType = 'TEMPORARY' then
select nvl(sum(bytes)/1048576,0) into TotalSpace
from dba_temp_files
where tablespace_name = TabSpaceName;
select nvl(sum(bytes_free)/1048576,0) into FreeSpace
from v$temp_space_header
where tablespace_name = TabSpaceName;
else
select nvl(sum(bytes)/1048576,0) into TotalSpace
from dba_data_files
where tablespace_name = TabSpaceName;
select nvl(sum(bytes)/1048576,0) into FreeSpace
from dba_free_space
where tablespace_name = TabSpaceName;
end if;
SumTotal := SumTotal + TotalSpace;
SumFree := SumFree + FreeSpace;
SumUsed := SumUsed + (TotalSpace-FreeSpace);
if (TotalSpace-FreeSpace)/TotalSpace*100 >= m_limit then
dbms_output.put_line
(
rpad(TabSpaceName,30)
|| ' '||
to_char(TotalSpace,'999,999')
|| ' '||
to_char(TotalSpace-FreeSpace,'999,999')
|| ' '||
to_char(FreeSpace,'999,999')
|| ' '||
to_char ((TotalSpace-FreeSpace)/TotalSpace*100,'999.99')
|| ' '||
to_char (FreeSpace/TotalSpace*100,'999.99')
);
end if;
END LOOP;
dbms_output.put_line
('---------------------------------------------------------------------------- ');
dbms_output.put_line
(
'TOTAL '
|| ' '||
to_char(SumTotal,'999,999')
|| ' '||
to_char(SumUsed,'999,999')
|| ' '||
to_char(SumFree,'999,999')
|| ' '||
to_char (SumUsed/SumTotal*100,'999.99')
|| ' '||
to_char (SumFree/SumTotal*100,'999.99')
);
dbms_output.put_line
('---------------------------------------------------------------------------- ');
END;
END;
用SQL语句:
col free for a10
col usage for a10
col tablespace_name for a30
col total for a10
set pagesize 100
with
s_total as (
select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name
union all
select tablespace_name, sum(bytes) bytes
from dba_temp_files
group by tablespace_name
),
s_free as (
select tablespace_name, sum(bytes) bytes
from dba_free_space
group by tablespace_name
union all
select tablespace_name,bytes_free
from v$temp_space_header
)
select m.tablespace_name
, case
when m.bytes < 1024 then m.bytes || 'B'
when m.bytes >= 1024 and m.bytes < (1024 *1024-1) then round(m.bytes / 1024) || 'KB'
when m.bytes >= 1024 * 1024 and m.bytes < (1024 * 1024 * 1024-1) then round(m.bytes / 1024 / 1024) || 'MB'
when m.bytes >= 1024 * 1024 * 1024and m.bytes < (1024 * 1024 * 1024 * 1024-1) then round(m.bytes / 1024 / 1024 / 1024) || 'GB'
end as TOTAL
, case
when f.bytes < 1024 or f.bytes is null then nvl(f.bytes,0) || 'B'
when f.bytes >= 1024 and f.bytes < (1024 * 1024 -1) then round (f.bytes / 1024) || 'KB'
when f.bytes >= 1024 * 1024 and f.bytes < (1024 * 1024 * 1024-1) then round (f.bytes / 1024 / 1024) || 'MB'
when f.bytes >= 1024 * 1024 * 1024and f.bytes < (1024 * 1024 * 1024 * 1024-1) then round (f.bytes / 1024 / 1024 / 1024) || 'GB'
end as FREE
, 100 - round(nvl(f.bytes,0) / m.bytes * 100 ) || '%' USAGE
from s_TOTAL M, S_FREE F
where m.tablespace_name = f.tablespace_name(+)
order by usage desc;
其实主要就是用dba_data_files(找总的size)和dba_free_space(找未使用的size)这两个view
分享到:
相关推荐
此SQL脚本用于计算Oracle数据库中各个表空间的使用率: 1. **表空间名**:显示具体的表空间名称。 2. **Total_MB**:计算每个表空间的总大小(MB)。 3. **Used_MB**:计算每个表空间已使用的空间大小(MB)。 4. *...
此脚本主要关注于表空间的整体利用率,通过计算已使用空间与总空间的比例来确定利用率。脚本的关键部分包括: 1. **统计空闲空间**:使用`SYS.DBA_FREE_SPACE`视图来汇总每个表空间下的所有空闲块的大小。 2. **...
2. **计算碎片率**:利用`(sum(free)*100/sum(bytes))`计算表空间的碎片率,其中`sum(free)`表示总的空闲空间,`sum(bytes)`表示总的分配空间。 3. **结果解读**:当计算得到的百分比小于30时,表明该表空间存在较高...
以下脚本可以显示每个表空间的总空间、已使用空间、使用率和剩余空间。 ``` SELECT D.TABLESPACE_NAME, SPACE "SUM_SPACE(M)", BLOCKS SUM_BLOCKS, ... FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*...
这部分脚本提供了表空间的使用率分析,不仅展示了每个表空间的自由空间,还计算了使用百分比和自由百分比,帮助管理员评估空间利用率和规划未来的存储需求。 ```sql -- 查看自由空间 SELECT SUM(bytes)/(1024*1024)...
- **说明**:此查询提供了一个更加全面的表空间使用情况报告,包括总的大小、已用空间、剩余空间以及使用率和剩余率。 - **应用场景**:对于整体评估表空间状态非常有用,特别是需要定期生成报告的情况下。 #### ...
脚本执行后,会返回一个结果集,其中包含了每个表空间的名称(TABLESPACE_NAME)、总空间(SUM_SPACE(M))、总块数(SUM_BLOCKS)、已用空间(USED_SPACE(M))、使用率(USED_RATE(%))以及空闲空间(FREE_SPACE(M)...
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) ...
- **命令解释**:显示系统当前的CPU使用率、内存使用情况等信息。 - **意义**:通过观察这些指标,可以了解服务器的整体负载情况,从而判断服务器是否满足数据库的需求。 ##### 4. CRS集群检查 ```shell crsctl ...
在这个分支中,脚本将执行新编写的SQL查询,计算临时表空间的使用率,并根据预设的阈值判断是否发出警告或警报。此外,还需要确保脚本能够处理多个临时表空间,而不仅仅是名为"TEMP"的默认临时表空间。 在修改后的...
例如,通过`dba_free_space`视图可以查找碎片,并使用`ALTER TABLESPACE COALESCE`和`ALTER TABLE DEALLOCATE UNUSED`命令进行整理。 7. **查看高碎片程度的表**:使用`dba_segments`视图,可以找出具有过多段的表...
可以设置警报或者定期运行脚本来检查空间利用率。 4. **处理DBF日志文件**:这里的"DBF"可能指的是数据库数据文件(Datafiles)。如果日志文件过大,可能会影响数据库性能。可以考虑归档旧的日志文件或调整日志文件...
压缩备份可以节省磁盘空间,但会增加CPU使用率。 8. **备份策略**: 可以结合RMAN的`RETENTION POLICY`来制定备份保留策略,例如基于时间或还原点的保留。 9. **验证备份**: ```sql RUN { validate backup ...
此脚本可以输出各个表空间的使用率。 **示例脚本**: ```bash #!/bin/bash sqlplus user/pass@dbname SELECT TABLESPACE_NAME, SUM(BYTES)/(1024*1024) "MB" FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME; EXIT;...
此脚本用于计算每个表空间的使用率百分比,这对于评估表空间的使用效率非常重要。 #### 3.16 是否存在空间无法扩展的情况(时间长) **脚本示例**: ```sql SELECT * FROM dba_tablespaces WHERE contents = '...
在Oracle数据库系统中,表空间(Tablespace)是存储数据对象如表、索引、视图等的基础单元。管理表空间对于确保数据库高效运行至关重要。本文将深入探讨Oracle表空间的回收过程,并提供一个可能的回收脚本示例。 1....
### Oracle管理及常用基础脚本知识点详解 #### 一、概览 在Oracle数据库管理过程中,熟练掌握并运用各类查询脚本是确保数据库性能优化、故障排查和日常维护的重要手段。本文将根据提供的文档信息,详细解读每个...
提供的查询展示了如何计算表空间的总大小、剩余大小、使用大小以及使用率。通过计算 `(total - free) / total` 可以得到表空间的使用百分比,而`((total - free)/ 3 )-free)`则用于估算未来扩容需求,基于过去三年的...