问题描述:使用存储过程的方式对oracle数据库的无效对象,如视图或者同义词进行定期的编译,让他变成一个有效的对象,加上定时任务可以实现自动化的处理。同时在数据库内部创建一个记录表,用来记录被编译过的对象

/*重新编译无效视图,无效同义词存储过程
--1.创建无效对象监控表invalid_object_record,创建无效对象保存表preserve_object_record
create table invalid_object_record
(
id number generated by default as identity,
OWNER VARCHAR2(128),
OBJECT_NAME VARCHAR2(128),
OBJECT_TYPE VARCHAR2(23),
STATUS VARCHAR2(7)
);
COMMENT ON TABLE invalid_object_record IS 'This is the invalid object monitoring table'; create table preserve_object_record
(
OWNER VARCHAR2(128),
OBJECT_NAME VARCHAR2(128)
);
COMMENT ON TABLE invalid_object_record IS 'This is an invalid object save table'; --2.创建使用用户,分配权限
create user steven identified by 123456;
grant resource,connect,create session to steven;
--grant select on dba_users to steven;
grant select on dba_objects to steven;
alter user steven quota unlimited on USERS; --3.写入记录保存表
insert into preserve_object_record values('SCOTT','V_TEST');
commit; --4.在steven用户创建存储过程
*/ CREATE OR REPLACE PROCEDURE PROC_INVALID_OBJECT
as
t_OWNER VARCHAR2(128);
t_object_name VARCHAR2(128);
t_status VARCHAR2(7);
t_object_type VARCHAR2(23);
t_sql varchar2(200); select
CURSOR c1 IS select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from DBA_OBJECTS where
(OWNER,OBJECT_NAME) not in (select OWNER,OBJECT_NAME FROM preserve_object_record)
AND OWNER not IN (
'SYS','SYSTEM','XS$NULL','OJVMSYS','LBACSYS','OUTLN','SYS$UMF','DBSNMP','APPQOSSYS','DBSFWUSER','GGSYS','ANONYMOUS','CTXSYS','DVF','DVSYS','GSMADMIN_INTERNAL','MDSYS','OLAPSYS','XDB',
'WMSYS','GSMCATUSER','MDDATA','REMOTE_SCHEDULER_AGENT','SYSBACKUP','GSMUSER','GSMROOTUSER','SYSRAC','SI_INFORMTN_SCHEMA','AUDSYS','DIP','ORDPLUGINS','ORDDATA','SYSKM',
'ORACLE_OCM','ORDSYS','SYSDG','PUBLIC')
AND STATUS = 'INVALID'
AND OBJECT_TYPE in ('VIEW','SYNONYM'); begin
--执行之前初始化
EXECUTE IMMEDIATE 'TRUNCATE TABLE invalid_object_record'; --循环处理无效对象
FOR x IN c1 LOOP
begin
t_OWNER := x.OWNER;
t_object_name := x.OBJECT_NAME;
t_sql :='select count(*) from "'||t_OWNER||'"'||'.'||'"'||t_object_name||'" where a = b';
Execute immediate t_sql;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLCODE || ' - ' || SQLERRM);
END;
END LOOP; --记录未被成功处理到表中的信息
insert into invalid_object_record(OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS) select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from DBA_OBJECTS where
(OWNER,OBJECT_NAME) not in (select OWNER,OBJECT_NAME FROM preserve_object_record)
AND OWNER not IN (select username from dba_users where ORACLE_MAINTAINED = 'Y')
AND OWNER != 'PUBLIC'
AND STATUS = 'INVALID'
AND OBJECT_TYPE in ('VIEW','SYNONYM');
commit;
END;
/

Oracle自动化编译无效对象的更多相关文章

  1. oracle compile 编译无效对象

    原博主:http://blog.csdn.net/tianlesoftware/article/details/4843600 Applies to: Oracle Server - Enterpri ...

  2. oracle 编译无效对象

    在数据库中,会存在一些无效的对象,导致这种现象的发生原因很多,其中最常见的就是数据库升级(例如修改了表的结构),迁移而引起. 编译无效对象的方式: 1 使用alter **** compile 语句进 ...

  3. Oracle EBS 重新编译无效对象 invalid object

    1.  查看数据库中的无效对象      check oracle object      SQL> select count(*) from dba_objects where status= ...

  4. ORACLE编译失效对象小结

    在日常数据库维护过程中,我们会发现数据库中一些对象(包Package.存储过程Procedure.函数Function.视图View.同义词.....)会失效,呈现无效状态(INVALID).有时候需 ...

  5. oracle重新编译失效对像

    重新编译失效对像可执行utlrp.sql文件: SQL> @?/rdbms/admin/utlrp.sql TIMESTAMP --------------------------------- ...

  6. Oracle视图编译错误解决办法

    因为新搭的环境,数据库是从另一个现成的环境导过来的,直接后台用exp和imp命令操作.但是新环境的Oracle数据库有问题,一些视图创建不了,导致用到这些视图的视图和存储过程也编译不了.后来手工重新编 ...

  7. 转://oracle 重新编译用户无效对象

    select owner,object_name, replace(object_type,' ','') object_type,to_char(created,'yyyy-mm-dd') as c ...

  8. 处理Oracle数据中的无效对象

    今天还原了一份数据库(在服务器上没有无效对象),还原在本地之后有三十几个无效对象,当时很是郁闷,然后我发现还原之后的数据库中缺少表! 开始我怀疑Oracle数据库的还原功能,但是在我创建表的时候发现, ...

  9. sqlplus编译失效对象

    原文整理自:http://www.51testing.com/?uid-16403-action-viewspace-itemid-98161:http://www.eygle.com/archive ...

  10. 构建Jenkins自动化编译管理环境

    今天研究了一下Jenkins,有了一个粗浅的认识,顺手把构建的过程说一下,后续慢慢补充: (1)Secure CRT 连接到Linux服务器 要注意的一点是,要搞好一个文件传输的路子,否则不好传东西. ...

随机推荐

  1. 05.Java 方法详解

    1.方法的定义及调用 设计方法的原则:一个方法只完成一个功能,有利于后期的扩展 方法的定义: 修饰符(可选) 返回值类型 方法名(参数类型 参数名(可选)){ 方法体 return 返回值; } 2. ...

  2. leaflet利用hotline实现河流差值渲染热力图

    实现效果(这里做了1条主河道和5个支流): 核心代码使用了Leaflet.hotline插件,github下载地址链接 详情见我之前整理的一篇文章介绍河流热力图 核心代码逻辑: // 处理河流数据以及 ...

  3. MindSponge分子动力学模拟——自定义控制器(2024.05)

    技术背景 分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的.例如控温器可以用于实现NVT系综,控压器可用于实现NPT系 ...

  4. 记一次DRF问题排障

    1 最近在搞django,在写一个接口的时候用到了APIview,之后再调用接口的时候一直显示405,不允许使用post方法 视图

  5. N 年前,为了学习分库分表,我把 Cobar 源码抄了一遍

    10 几年前,互联网产业蓬勃发展,相比传统 IT 企业,互联网应用每天会产生海量的数据. 如何存储和分析这些数据成为了当时技术圈的痛点,彼时,分库分表解决方案应运而生. 当时最流行的 Java 技术论 ...

  6. C# java 的 equals 与 == 的区别

    C# String a = "宜春"; String b = new String(new char[] { '宜', '春' }); String c = b; //注意这里是引 ...

  7. Immich让你从此告别百度网盘备份手机照片

    一. Immich 是什么 Immich是一个开源的图片自托管服务,它能实现类似于百度网盘的照片自动备份.分类等功能,它同时提供了Web管理页面,和移动端APP,可以轻松备份手机中的照片至家庭服务器中 ...

  8. 浏览器打开JupyterLab后所有快捷键与窗口按键均失效怎么办?

      本文介绍JupyterLab中菜单栏按钮无法点击.快捷键无法执行问题的解决办法.   近期打开JupyterLab后,发现其中菜单栏按钮无法点击,快捷键也均无法执行.如图,红框内的按钮点击均无任何 ...

  9. Winform程序在VS中打包成安装程序(带卸载)

    场景 在VS中进行Winform开发时,可以直接在项目上右击选择生成 则会在项目的bin目录下直接生成exe等文件,此时将这个文件夹直接整个复制到别的地方就可以运行. 但是如果将其做成安装包安装的形式 ...

  10. 使用 TestContainers 进行数据库集成测试

    在软件开发过程中,集成测试是至关重要的一环.它确保不同组件之间的协作正常,并验证系统在整体上的功能和性能.然而,传统的集成测试往往需要依赖于外部资源,如数据库.消息队列等,这给测试环境的搭建和维护带来 ...