专栏首页Tidb让OracleDB自动诊断 自动扩容表空间
原创

让OracleDB自动诊断 自动扩容表空间

**导读**

> 作者:杨漆

> 16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。

Oracle运维中常出现Tablespace空间使用满,导致挂库事件。

通常出现这类事件时,需要DBA紧急处理。

如果表空间特别多,Server数量上千台,DBA就需要多次查询、手工执行枯燥的扩容任务。

如果空间不够情况正好出现在半夜、周末时,DBA怎一个苦字了得!

怎样将DBA释放出来,达到智能化运维,让DB自动诊断,自动解决表空间扩容需求?

用这套自动扩容脚本就好(我已多年不写代码了,下午写的这套Coding比较Low,仅抛砖引玉,大家可以在次基础上改写以更好地适应自己的DB运维环境)

### Oracle表空间使用情况监控

## 改成 GB显示

set linesize 400

set pagesize 200

set feed off

-- create table monitor_tablespace_rate (tbs_name varchar2(50),TOTAL_GB number,USED_GB number, FREE_GB number,RATE number, MAXEXTEND_GB number);

truncate table monitor_tablespace_rate;

insert into monitor_tablespace_rate select * from

(SELECT D.TABLESPACE_NAME TBS_NAME,

D.TOT_GROOTTE_MB TOTAL_GB,

D.TOT_GROOTTE_MB - F.TOTAL_BYTES USED_GB,

F.TOTAL_BYTES FREE_GB,

TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.MAXEXTEND_MB * 100,

2),

'990.99') RATE,

D.MAXEXTEND_MB MAXEXTEND_GB

FROM (SELECT TABLESPACE_NAME,

Round(Sum(NVL(BYTES,0)) / (1024 * 1024 * 1024), 2) TOTAL_BYTES,

Round(Max(NVL(BYTES,0)) / (1024 * 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 * 1024), 2) TOT_GROOTTE_MB,

Round(Sum(DECODE(DD.MAXBYTES,0,DD.BYTES,DD.MAXBYTES)) / (1024 * 1024 * 1024), 2) MAXEXTEND_MB

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)

AND D.TABLESPACE_NAME NOT LIKE '%UNDO%'

ORDER BY 5 desc);

-- 创建存储过程,可用剩余空间小于15%时自动扩容tablespace

create or replace procedure proc_monitor_tbs_rate

as

file_num int;

file_name varchar2(200);

new_file_name varchar2(200);

str varchar2(300) ;

begin

for i in (select TBS_NAME,RATE from monitor_tablespace_rate) loop

if i.rate>85 then

select file_name,max(file_id) into file_name,file_num from dba_data_files where tablespace_name=i.TBS_NAME group by file_name;

file_num:=file_num+1;

new_file_name :=substr(file_name,1,instr(file_name,'/',-1))||i.TBS_NAME||file_num;

str :='alter tablespace '||i.TBS_NAME||' add datafile '||''''||new_file_name||''''|| ' size 1G autoextend on';

execute immediate str;

DBMS_OUTPUT.PUT_LINE(i.TBS_NAME||' add '||new_file_name);

end if;

end loop;

end;

/

-- 创建定时任务,每小时执行一次 (存储过程里的;号不能省略)

variable jobno number;

begin

dbms_job.submit(:jobno,'proc_monitor_tbs_rate;', sysdate, 'sysdate+1/24');

commit;

end;

/

-- 查看定时任务情况

select job, next_date, next_sec, failures, broken from user_jobs;

JOB NEXT_DATE NEXT_SEC FAILURES B

---------- ------------------ -------------------------------- ---------- -

3 22-JUL-21 17:52:54 0 N

-- 任务生成成功,Job号为3

-- 停止定时任务

begin

dbms_job.broken(3, true, sysdate);

commit;

end;

/

-- 启动定时任务

begin

dbms_job.run(3);

commit;

end;

/

分享给大家,希望大家可以少加班、少熬夜。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle表空间自动监控 自动扩容程序 修正版

    答: 用这套自动扩容脚本就好(我已多年不Coding,下午写的这套代码比较Low,仅抛砖引玉,各位大神可在此基础上改写以便更好地适应自己的DB环境)

    杨漆
  • redis-哈希表自动扩容

    @(架构说)[redis] 为了回答上次遗留问题 哈希表如何扩容问题? 重点内容: 1 注释代码:最新版本 https://github.com...

    程序员小王
  • [Python运维]自动化监控多个Oracle表空间

    这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。

    bsbforever
  • 创建表空间、用户、扩容、移动数据文件

    SQL> create tablespace test_data   2  logging   3  datafile '/opt/oracle/orada...

    bisal
  • Docker,让数据库部署完成在弹指一挥间

    容器技术并非Docker的创新,容器技术所依赖的一些基础技术,如namespace、cgroup、chroot等等,也都不是Docker的首创。

    沃趣科技
  • linux命令之-more

    more (more) 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比,方便逐页阅读(file peru...

    用户5807183
  • [Python运维]自动化监控Oracle表空间并发送报警

    这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。

    bsbforever
  • 自动化监控Oracle表空间并发送报警

    其中讲到了利用查看表空间的使用率,这时我们就可以利用Python监控这个数值,等超过阈值后发送邮件通知我们

    bsbforever
  • 34个最受欢迎的JavaScript库

    在编写调试Node.js项目,修改代码后,需要频繁的手动 close 掉,然后再重新启动,非常繁琐。现在,我们可以使用nodemon这个工具,它的作用是监听代码...

    Fundebug
  • 【Z投稿】基于ODBC的ORACLE表空间自动发现

    日常数据库运维中需要关注数据库表空间使用情况,防止出现表空间写满导致业务不可用。但是有些业务数据库表空间数目较多且配置不规范,给运维工作带来一定工作量和难度。

    Zabbix
  • 解决macOS下ssh空闲一段时间自动断开的问题

    使用ssh登录linux服务器后,在后台放置一段时间,会发现会自动断开或者卡死无法输入

    Huramkin
  • PYTHON 自动化运维 -- 绘制数据库表空间变化图

    已oracle为例(sql语句见文末:根据自己的修改,比如PDB名字,保存的位置等):

    大大刺猬
  • Centos7静默安装Oracle11g

    数据盘未做格式化分区(这里仅格式化并挂载到单独目录,不做分区) 根据内存大小需要对此操作系统重新分配合适的swap空间(这里增加到16G),关于swap分区大...

    仙人技术
  • 将ACCS中的Node.js应用程序连接到Exadata Express

    我最爱的云服务OracleExadata云快递服务Exadata(Express)和容器应用云服务(ACCS)。Exadata表达是一种全面管理Oracle数据...

    用户1169992
  • 如何找出被黑客攻击后篡改的WordPress 文件?

    如果你的WordPress 站点不幸被某个黑客攻击,那么你有必要找出黑客是否篡改过WordPress 的文件以防止其留下某些后门。本文为你介绍了一些快速查找被黑...

    Jeff
  • 新基建中的AI医疗:加速商业模式验证还需一味药引

    我国新医改从2009年3月中共中央、国务院向社会公布《关于深化医药卫生体制改革的意见》开始,至今已经走过了11个年头。

    用户2908108
  • 20万DBA最关注的11个问题

    近期我们在DBASK小程序新关联了运维之美、高端存储知识、一森咖记、运维咖啡吧等数据领域的公众号,欢迎大家阅读分享。

    数据和云
  • 20万DBA最关注的11个问题

    原文:http://www.enmotech.com/web/detail/1/757/1.html

    数据和云01
  • 肠子里的两万个同盟军:GPU 如何协助诊断消化道异常情况

    在1966年经典科幻片《神奇旅程》(Fantastic Voyage)里,一队医生和一艘太空时代的潜水艇缩小了尺寸,注射进一名受伤的科学家体内,企图清除脑部血块...

    GPUS Lady

扫码关注云+社区

领取腾讯云代金券