数据库表空间监控语句,教你轻松搞定! (数据库表空间监控语句)

数据库表空间是一个重要的数据存储区域,需要特别的管理和监控。因为数据库表空间的容量使用不当,会导致数据库性能的下降,甚至导致存储不足问题。所以合理有效的监控数据库表空间,是数据库运维管理的基本技能之一。在本文中,我们将教大家如何通过SQL脚本,轻松地监控数据库表空间的使用情况,以便于管理和维护。

1. 查询表空间使用信息

首先我们需要查看表空间使用情况,通过以下SQL语句查询:

“`

select d.tablespace_name, tbs_size Size_MB, (nvl(free_space,0))*8192/1024/1024 free_MB

from (SELECT tablespace_name, SUM(bytes) tbs_size FROM dba_data_files GROUP BY tablespace_name) d,

(select TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024)) free_space from dba_free_space group by

TABLESPACE_NAME) f

where d.tablespace_name = f.tablespace_name (+);

“`

这段语句的主要作用是查询所有表空间的大小和剩余空间,通过这些信息可以计算出表空间的使用率,以供后面监控使用。运行这个SQL语句后,将会得到一个结果,类似于以下的表格:

“`

TABLESPACE_NAME Size_MB free_MB

USERS 8000 3225

SYSTEM 790 380

SYSAUX 7800 800

TEMP 1200 10

UNDOTBS1 1320 1320

“`

2. 设置告警阈值

获取表空间使用率之后,我们需要设置告警阈值,以便判断表空间是否达到警戒线。这些阈值应该基于当前数据库的使用情况进行定制,因为每个数据库都有不同的性能和容量需求。以下是一款通用的告警阈值设置,可以在实际项目中进行调整:

“`

SELECT df.tablespace_name, 100 – ROUND ( (fs.phys_free / ts.phys_total) * 100) PERCENT_FULL, ‘Full’

FROM sys.dba_tablespaces df,

(SELECT tablespace_name, SUM (bytes) phys_total

FROM sys.dba_data_files

GROUP BY tablespace_name) ts,

(SELECT tablespace_name, SUM (bytes) phys_free

FROM sys.dba_free_space

GROUP BY tablespace_name) fs

WHERE fs.tablespace_name(+) = df.tablespace_name

AND ts.tablespace_name = df.tablespace_name

UNION ALL

SELECT df.tablespace_name,

99, ‘Full’

FROM sys.dba_tablespaces df

WHERE NOT EXISTS (SELECT NULL

FROM sys.dba_data_files fs

WHERE fs.tablespace_name = df.tablespace_name);

“`

以上是一个查询告警阈值的SQL语句。这个脚本设置了表空间使用率的警戒线为100%。当警戒线超过100%时,将会向管理员发出告警提示。

3. 设置监控报警

当我们已经获取了表空间的使用率和告警阈值之后,下一步就需要设置监控报警,以便于及时和有效的处理问题。在Oracle数据库中,我们可以通过DBMS_SCHEDULER和DBMS_LOB建立一个监控脚本,并将其加入到系统任务计划中。以下是一个完整的监控脚本:

“`

declare

v_used_pct number;

v_tablespace varchar2(30);

cursor c_alert_tbs is

select tablespace_name from dba_tablespaces;

begin

for rec in c_alert_tbs loop

select round(sum((d.bytes-f.bytes))*100/d.bytes)

into v_used_pct

from dba_data_files d,dba_free_space f

where d.tablespace_name=f.tablespace_name and d.tablespace_name=rec.tablespace_name;

if v_used_pct > 90 then

v_tablespace:=rec.tablespace_name;

utl_ml.send(sender => ‘ml@yourcompany.com’,

recipients => ‘admin@yourcompany.com’,

cc => ‘developer@yourcompany.com’,

subject => ‘Database tablespace problem’,

message => ‘Tablespace ‘||v_tablespace||’ is above 90% full.’);

end if;

end loop;

end;

“`

以上是一个数据库表空间监控脚本,当表空间的使用率超过90%时,将向管理员发出告警邮件。我们可以将这段脚本存储在数据库中,然后在计划任务中定时执行。

4. 检查警报日志

管理员需要经常性的检查警报日志,以便及时跟进和处理问题。在Oracle数据库中,我们可以通过以下命令检查警报日志:

“`

SELECT * FROM dba_scheduler_job_run_detls where job_name in (‘ALERT_MONITOR’)

order by log_date desc;

“`

以上是一个查询警报日志的SQL命令。执行这个命令后,将会显示所有与ALERT_MONITOR任务有关的警报日志。

通过本文的介绍,我们可以知道如何通过SQL脚本,轻松地监控数据库表空间的使用情况。管理员只需要了解这些SQL语句的使用方法,并根据实际需要进行调整。在实际项目中,定期监控和处理数据库表空间的使用率,可以保证数据的安全和性能。

相关问题拓展阅读:

ORACLE有一个表空间增幅非常快,我想看具体是表空间中的哪些表的数据增幅这么大,怎么看?

控制台里面看表空间的占用

pl/sql developer里:reports->dba->tablespace可以查看

toad里:database->administer->tablespaces里查看的更清晰,还可以修改

我觉得,可以这样:

1.首先执行下面的语句:

Select Segment_Name,Sum(bytes)/1024/1024 sum_mb From Dba_Extents Group By Segment_Name order by sum_mb desc;

把数据保存下来。

2.过一段时间(间隔得你自己把握,你肯定知道表空间多长时间会大幅增长),再执行下上面的语句,和前面的数据比较下,看哪个表的空间增长的多。

注意:时间间隔不能太小,否则看不出来。一次扩展的空间是表定义来的。

像我这,有个表,过不了5分钟就要增加。

只能看到哪个表比较大,用控制台和用SQL语句查数据字典是一样的,

select segment_name,sum(bytes)/1024/1024/1024 sum_b from dba_segments group by segment_name order by sum(bytes)/1024/1024/1024 desc ;

看哪个比较快只能是通过持续的DBA监控来做到,比如每天把上面的查询查到的东西放在一个统计表里面,然后经常监控这个表能发现到数据的变化是否正常。

数据管理员是什么做什么的?

主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。

在国外,也有公司把DBA称作数据库工程师(Database Engineer),两者的工作内容基本相同,都是保证数据库服务7*24小时的稳定高效运转。

扩展资料

产品的整个生命周期里数据库管理员的职责重要而广泛,这催生了各个纵向的运维技术方向,凡是关系到数据库质量、效率、成本、安全等方面的工作,及涉及到的技术、组件,主要包括:

1、数据库监控技术:包括监控平台的研发、应用,服务监控准确性、实时性、全面性的保障。

2、数据库故障管理:包括服务的故障预案设计,预案的自动化执行,故障的总结并反馈到产品/系统的设计层面进行优化以提高产品的稳定性。

3、数据库容量管理:测量服务的容量,规划服务的机房建设,扩容、迁移等工作。

4、数据库性能优化:从各个方向,包括SQL优化、参数优化、应用优化、客户端优化等,提高数据库的性能和响应速度,改善用户体验。

参考资料来源:

百度百科-数据库管理员

数据库管理员的职责:

一、 一般监视

1. 监控数据库的警告日志。Alert.log,定期做备份删除。

2. Linstener.log的监控,/network/admin/linstener.ora。

3. 重做日志状态监视,留意视图v$log,v$logfile,该两个视图存储重做日志的信息。

4. 监控数据库的日常会话情况。

5. 碎片、剩余表空间监控,及时了解表空间的扩展情况、以及剩余空间分布情况,如果有连续的自由空间,手工合并。

6. 监控回滚段的使用情况。生产系统中,要做比较大的维护和数据库结构更改时,用rbs_big01来做。

7. 监控扩展段是否存在不满足扩展的表。

8. 监控临时表空间。

9. 监视对象的修改。定期列出所有变化的对象。

10. 跟踪文件,有初始化参数文件、用户后台文件、系统后台文件

二、 对数据库的备份监控和管理

数据库的备份至关重要,对数据库的备份策略要根据实际要求进行更改,数据的日常备份情况进行监控。由于我们使用了磁带库,所以要对legato备份软件进行监控,同时也要对rman备份数据库进行监控。

三、 规范数据库用户的管理

定期对管理员等重要用户密码进行修改。对于每一个项目,应该建立一个用户。DBA应该和相应的项目管理人员或者是程序员沟通,确定怎样建立相应的数据库底层模型,最后由DBA统一管理,建立和维护。任何数据库对象的更改,应该由DBA根据需求来操作。

四、 对SQL语句的书写规范的要求

一个SQL语句,如果写得不理想,对数据库的影响是很大的。所以,每一个程序员或相应的工作人员在写相应的SQL语句时,应该严格按照《SQL书写规范》一文。最后要有DBA检查才可以正式运行。

五、 DBA深层次要求

一个数据库能否健康有效的运行,仅靠这些日常的维护还是不够的,还应该致力于数据库的更深一层次的管理和研究:数据库本身的优化,开发上的性能优化;项目的合理化;安全化审计方面的工作;数据库的底层建模研究、规划设计;各种数据类型的处理;内部机制的研究;ora-600错误的研究、故障排除,等等很多值得探讨的问题。

关于数据库表空间监控语句的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 数据库表空间监控语句,教你轻松搞定! (数据库表空间监控语句)