昨天发现近一段时间,公司某oracle库数据泵方式备份比之前慢了很多,备份集大小并未增长太多。查看了下发现该用户下存在几十万张表。

一、问题分析

1.查看用户下面的表

select count(*) from user_tables

count(*)

--   ---------

1   754583

2.按表名查看用户下的表类型数量统计

select substr(table_name, 0, 4), count(*)
from user_tables
group by substr(table_name, 0, 4)
order by count(*) desc

     SUBSTR(table_name, 0, 4)    count(*)

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

1     SUME              441718
2     TEMP              209421
3     SUBR              34659
4     HP_T               3103
5     TEPT               1932
6     CITE                  163

3.查看表数量最多的分类的全名

select * from user_tables where table_name like 'SUME%'

表名可以看出后面全是随机数,所有表为空表。

二、确认及解决问题

1.确认

经过和开发确认后SUME、TEMP、SUBR这三类表是程序代码中创建并使用完临时表后没有清理操作,历史的不会再被复用。

2.解决过程

(1)程序代码最后添加清理会话创建的临时表操作。

(2)通过存储过程和JOB任务清理历史的临时表和程序补丁生效前产生的临时表。

(3)待问题解决后停用/清理JOB任务。

(2.1)存储过程

select min(created),max(created) from user_objects where object_type = 'TABLE' and object_name like 'TEMP%'

--可以先看下要清理的临时表的时间范围,看是否存在近期使用的。

--存储过程正文

create or replace procedure p_drop_temq is v_tab_name varchar(30);

cursor cur_drop_temq is select object_name from user_objects where object_type = 'TABLE' and (object_name like 'TEMP%' or object_name like 'SUME%' or object_name like 'SUBR%' ) and created < sysdate - 3;   --为了防止影响现有用户使用,清理3天之前的临时表。建议先执行查询语句确认下要清理的表,执行前做好备份。

begin

open cur_drop_temq;

loop fetch cur_drop_temq into v_tab_name;

exit when cur_drop_temq%notfound;

execute immediate 'drop table ' || v_tab_name;

end loop;

close cur_drop_temq;

end;

(2.2)创建job定时任务 实现自动调用存储过程

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(JOB => job, /*自动生成JOB_ID*/
            WHAT => 'P_DROP_TEMQ;', /*需要执行的存储过程名称或SQL语句*/
            NEXT_DATE => sysdate, /*初次执行时间*/
            INTERVAL => 'sysdate+ 1+2/(24)' /*每天凌晨2点*/);
  commit;
end;

(2.3)通过查询系统表查看该job信息 select * from user_jobs ;

详细操作可参考文章:Oracle JOB详解

(3)JOB的停用/清理

删除JOB方法:注:BROKEN值如果为TRUE则为停用,FALSE为启用,默认FALSE。

begin

DBMS_JOB.BROKEN(JOB编号,TRUE);

dbms_job.remove(JOB编号);

commit;

end;

以下是只执行stop job的效果

begin

DBMS_JOB.BROKEN(83,TRUE);

--dbms_job.remove(JOB编号);

commit;

end;

如果需要同时删除几个job

begin

--DBMS_JOB.BROKEN(43,TRUE);

dbms_job.remove(43);

--DBMS_JOB.BROKEN(44,TRUE);

dbms_job.remove(44);

--DBMS_JOB.BROKEN(45,TRUE);

dbms_job.remove(45);

commit;

end;

Oracle 计划任务批量清理临时表实例的更多相关文章

  1. Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考

    写在前面: 1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补丁中附带的readme. 2.Oracle每季度都会更新一个最新的PSU,本文最新指的是当前最新 ...

  2. 分享一个批量导出当前实例下的所有linkedserver脚本

    分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linked ...

  3. 查询oracle数据库的数据库名、实例名、ORACLE_SID

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  4. oracle和mysql批量合并对比

    orm框架采用mybatis,本博客介绍一下批量合并merge用oracle和mysql来做的区别, oracle merge合并更新函数的详细介绍可以参考我以前的博客:https://blog.cs ...

  5. CLOUD清理临时表空间

    --查找空间名.物理空间路径 SELECT name, physical_nameFROM sys.master_filesWHERE database_id = DB_ID('tempdb'); 可 ...

  6. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  7. Asianux 7.3安装Oracle 11.2.0.4单实例体验

    环境:Asianux 7.3 需求:安装Oracle 11.2.0.4 单实例 背景:系统使用默认的最小安装部署,Oracle安装额外需要的包统一使用yum安装. 查看当前系统相关信息: [root@ ...

  8. Nginx 负载均衡的Cache缓存批量清理的操作记录

    1)nginx.conf配置 [root@inner-lb01 ~]# cat /data/nginx/conf/nginx.conf user www; worker_processes 8; #e ...

  9. Linux平台Oracle 12.1.0.2 单实例安装部署

    主题:Linux平台Oracle 12.1.0.2 单实例安装部署 环境:RHEL 6.5 + Oracle 12.1.0.2 需求:安装部署OEM 13.2需要Oracle 12.1.0.2版本作为 ...

  10. PHP批量清理MIP-cache缓存(内附在线mipcache清理工具)

    MIP是什么?我就不多说了把. MIPCache 又是什么? 科普一下:MIPCache 是一套基于代理的 CDN 缓存系统.可用于缓存所有被某度相关页面引用或者从百度相关服务点出的 MIP 页面.当 ...

随机推荐

  1. Launchpad是什么?Launchpad使用教程

    ​ Launchpad是什么?Launchpad 是用来查找和打开Mac系统下的 app 的最快捷方式,通过 Launchpad,您可以查看.整理并轻松打开Mac里面几乎所有的应用软件.下面带来Mac ...

  2. 浏览器 - 重绘(repaint)重排(reflow)

    浏览器 - 重绘(repaint)重排(reflow) 网页生成过程: HTML被HTML解析器解析成DOM 树 css则被css解析器解析成CSSOM 树 结合DOM树和CSSOM树,生成一棵渲染树 ...

  3. CentOS7 搭建 PXE 安装系统

    1. PXE介绍 2. 服务的搭建 2.1 DHCP服务搭建 2.1.1 安装DHCP软件包 2.1.2 修改dhcp配置文件 2.1.3 开启DHCP服务 2.1.4 查看dhcp服务是否开启 2. ...

  4. 沁恒蓝牙系列芯片USB烧录故障排查

    目录 使用USB烧录时让ISP工具能够识别芯片的操作是按住评估板上的"Download"按键,或者将PB22短接到GND,同时给板子上电.若是第一次拿到芯片,codeflash中是 ...

  5. echarts:双y轴图表刻度均匀分布问题

    今天分享一个小问题,内容不多. 双y轴图表中,为了图表的美观,经常会隐藏一侧的y轴刻度线,仅显示一侧的刻度线.那么问题就来了,两个y轴的数据数值大小不同,常常会导致刻度线的刻度分布不均匀,该如何解决呢 ...

  6. 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(下)

    自己尝试通过C语言方式驱动LED:

  7. uniapp离线打包安卓未配置appkey或配置错误

    按照这4步检查都没问题 1.查看签名文件是否配置到了主APP的build.gradle. signingConfigs { config { keyAlias 'newPt' keyPassword ...

  8. spring@Validated校验用法

    1.controller添加注解 public BaseResponse addOrUpdateUnit(@RequestBody @Validated RiskUnitDto riskUnitDto ...

  9. 集群activemq重启报错java.lang.OutOfMemoryError: GC overhead limit exceeded

    最近安全部门同事说我们环境有个弱密码漏洞,activemq后台的密码不够复杂,需要改为复杂密码. 我登录了他们扫出来的url,输入admin admin,果然进来了.不得不说上一位已离职同事的安全意识 ...

  10. js获取对象数组中指定属性值的新数据

    例: let arr = [ {name: "name1", age: "1",type:"1"}, {name: "name2& ...