编者按:留存一下供自己需要时查找。
【免责声明】本公众号文章仅代表个人观点,与任何公司无关,仅供参考。
编辑|SQL和数据库技术(ID:SQLplusDB)
查看无效对象
例1:
SQL> SET LINES 333 PAGES 111
SQL> COL OBJECT_NAME FOR A40
SQL> COL OBJECT_TYPE FOR A30
SQL> COL OWNER FOR A25
SQL> SELECT OWNER, OBJECT_TYPE,COUNT(*) OBJECT_COUNT FROM DBA_OBJECTS WHERE STATUS <> 'VALID'
2 GROUP BY OWNER,OBJECT_TYPE order by OWNER,OBJECT_TYPE;
OWNER OBJECT_TYPE OBJECT_COUNT
------------------------- ------------------------------ ------------
TEST PROCEDURE 1
TESTC100 FUNCTION 2
复制
例2:
SQL> SET LINES 333 PAGES 111
SQL> COL OBJECT_NAME FOR A40
SQL> COL OBJECT_TYPE FOR A30
SQL> SELECT OWNER, OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS
2 WHERE STATUS <> 'VALID' ORDER BY OWNER, OBJECT_NAME;
OWNER OBJECT_NAME OBJECT_TYPE
------------------------- ---------------------------------------- ------------------------------
TEST DO_CURSORS PROCEDURE
TESTC100 DEBUG_VERSION_RPT FUNCTION
TESTC100 VERSION_RPT FUNCTION
复制
查看某对象的依赖关系对象:
SELECT * FROM DBA_DEPENDENCIES WHERE NAME='&OBJECTNAME';
复制
编译个别对象:
例:
--编译程序包
ALTER PACKAGE package_name COMPILE;
---分别编译程序包PACKAGE和BODY
ALTER PACKAGE package_name COMPILE PACKAGE;
ALTER PACKAGE package_name COMPILE BODY;
--编译视图和触发器
ALTER VIEW <SCHEMA NAME>.<VIEW_NAME> COMPILE;
ALTER TRIGGER <SCHEMA).<TRIGGER_NAME> COMPILE;
--查看是否有编译错误
show errors
复制
PL/SQL生成脚本编译所有无效用户对象
例1:
--编译所有无效PROCEDURE对象
BEGIN
FOR cur IN (
SELECT
object_name
,object_type
FROM dba_objects
WHERE object_type = 'PROCEDURE'
AND status = 'INVALID'
)
LOOP
DBMS_OUTPUT.PUT_LINE(cur.object_name);
EXECUTE IMMEDIATE 'ALTER ' || cur.object_type || ' ' || cur.object_name || ' COMPILE';
END LOOP;
END;
/
复制
例2:
--生成手动编译无效对象的脚本,然后执行脚本。
SELECT 'ALTER ' || OBJECT_TYPE || ' ' || OWNER || '.' || OBJECT_NAME || ' COMPILE;'
FROM DBA_OBJECTS WHERE STATUS = 'INVALID' AND
OBJECT_TYPE IN ('PACKAGE','PACKAGE BODY','FUNCTION','PROCEDURE','TRIGGER','VIEW','SYNONYM','JAVA SOURCE','JAVA CLASS');
复制
utlrp.sql and utlprp.sql脚本编译数据库失效对象
Oracle提供了utlrp.sql和utlprp.sql脚本来重新编译数据库中的所有无效对象,
例:
@$ORACLE_HOME/rdbms/admin/utlrp.sql
@$ORACLE_HOME/rdbms/admin/utlprp.sql
复制
DBMS_UTILITY.compile_schema编译数据库失效对象
DBMS_UTILITY包中的COMPILE_SCHEMA过程编译指定模式中的所有过程,函数,包和触发器。
例:
EXEC DBMS_UTILITY.compile_schema(schema => 'SCOTT', compile_all => false);
复制
UTL_RECOMP包编译数据库失效对象
UTL_RECOMP包中包含两个用于重新编译无效对象的过程。
RECOMP_SERIAL过程一次重新编译所有无效对象,而RECOMP_PARALLEL过程使用指定数量的线程并行执行相同的任务。
例:
-- Schema level.
EXEC UTL_RECOMP.recomp_serial('SCOTT');
EXEC UTL_RECOMP.recomp_parallel(4, 'SCOTT');
-- Database level.
EXEC UTL_RECOMP.recomp_serial();
EXEC UTL_RECOMP.recomp_parallel(4);
-- Using job_queue_processes value.
EXEC UTL_RECOMP.recomp_parallel();
EXEC UTL_RECOMP.recomp_parallel(NULL, 'SCOTT');
复制
参考:
PL/SQL Packages and Types Reference
https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/UTL_RECOMP.html
>275 UTL_RECOMP
复制
其他参考
https://oracle-base.com/articles/misc/recompiling-invalid-schema-objects
Recompiling Invalid Schema Objects
Oracle オブジェクトを一括で再コンパイルする方法
https://www.saka-en.com/oracle/oracle-recompile-bulk/
复制
Hands On:(常用命令&小技巧)
【怎么办001】DROP USER ... CASCADE特别慢怎么办?
【怎么办】003 如何加强Oracle数据库安全--监控数据导入导出操作
【怎么办】004 如何找到删库跑路的人--监控数据库用户登录
SQL*PLUS技巧:生成易读的HTML报表【快问快答】如何判断OJVM是否被使用?【快问快答】如何收集回看sql语句中传入的绑定变量值
【快问快答】事务异常或者instance abort时,如何估算事务rollback时间
文章转载自Oracle数据库技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
676次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
634次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
541次阅读
2025-04-20 10:07:02
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
491次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
487次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
470次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
467次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
413次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
372次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
352次阅读
2025-05-05 19:28:36