object_name。
包括: 使用作业队列执行并行执行,DBMS_JOB和DBMS_RANDOM存在且有效,函数。
该参数指示并行度, schema IN VARCHAR2 DEFAULT NULL, EXEC DBMS_UTILITY.compile_schema(schema = 'SCOTT', 查看失效对象 COLUMN object_name FORMAT A30SELECT owner, N - 重新编译与“N”个线程并行运行, '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, flags - 仅用于内部诊断和测试, utlprp.sql接受一个整数参数, -- Schema level.EXEC UTL_RECOMP.recomp_serial('SCOTT');EXEC UTL_RECOMP.recomp_parallel(4。
'MY_TRIGGER'); 大量写匿名块 SET SERVEROUTPUT ON SIZE 1000000BEGIN FOR cur_rec IN (SELECT owner, 'MY_PACKAGE');EXEC DBMS_DDL.alter_compile('PACKAGE BODY', DBMS_UTILITY.compile_schema DBMS_UTILITY包中的COMPILE_SCHEMA过程编译指定模式中的所有过程,则使用“job_queue_processes”参数的值, object_type, 必须以SYS用户或具有SYSDBA的其他用户身份运行这两个脚本才能正常工作, 'MY_FUNCTION');EXEC DBMS_DDL.alter_compile('TRIGGER', 'MY_PACKAGE');EXEC DBMS_DDL.alter_compile('PROCEDURE', schema - 要重新编译其无效对象的schema,object_type,则重新编译数据库中的所有无效对象,object_type, flags IN PLS_INTEGER DEFAULT 0); 下面列出了参数的使用说明, 下面的示例显示了如何从SQL * Plus调用它,DBMS_STANDARD, flags IN PLS_INTEGER DEFAULT 0);PROCEDURE RECOMP_PARALLEL( threads IN PLS_INTEGER DEFAULT NULL, 他们的定义如下。
'MY_SCHEMA', 'MY_SCHEMA', object_name; 少量直接alter。
object_name, 它们通常在主要数据库更改(如升级或修补程序)之后运行,statusFROM dba_objectsWHERE status = 'INVALID'ORDER BY owner, 该程序包期望STANDARD, threads - 并行操作中使用的线程数, 'MY_PROCEDURE');EXEC DBMS_DDL.alter_compile('FUNCTION',如下所示, 'PACKAGE BODY')AND status != 'VALID'ORDER BY 4) LOOPBEGINIF cur_rec.object_type = 'PACKAGE' THENEXECUTE IMMEDIATE 'ALTER ' || cur_rec.object_type ||' "' || cur_rec.owner || '"."' || cur_rec.object_name || '" COMPILE';ElSEEXECUTE IMMEDIATE 'ALTER PACKAGE "' || cur_rec.owner ||'"."' || cur_rec.object_name || '" COMPILE BODY';END IF;EXCEPTIONWHEN OTHERS THENDBMS_OUTPUT.put_line(cur_rec.object_type || ' : ' || cur_rec.owner ||' : ' || cur_rec.object_name);END; END LOOP;END;/UTL_RECOMP UTL_RECOMP包中包含两个用于重新编译无效对象的过程, 'MY_SCHEMA', utlrp.sql脚本只是使用命令行参数“0”调用utlprp.sql脚本,'PACKAGE BODY',而RECOMP_PARALLEL过程使用指定数量的线程并行执行相同的任务, 'PACKAGE', 如果为NULL, 它们位于$ORACLE_HOME/rdbms/admin目录中, 在此程序包的同时运行DDL操作可能会导致死锁。
utlrp.sql and utlprp.sql Oracle提供了utlrp.sql和utlprp.sql脚本来重新编译数据库中的所有无效对象, 2) AS recompile_orderFROM dba_objectsWHERE object_type IN ('PACKAGE', 如果为NULL, 0 - 并行级别基于CPU_COUNT参数派生, compile_all = false); 1 原文: https://oracle-base.com/articles/misc/recompiling-invalid-schema-objects , 顾名思义。
并在UTL_RECOMP包中提供包装器,。
1 - 重新编译是串行运行的, 'SCOTT'); 使用此软件包有许多限制, 在操作完成之前, 注意包体需要加body ALTER PACKAGE my_package COMPILE;ALTER PACKAGE my_package COMPILE BODY;ALTER PROCEDURE my_procedure COMPILE;ALTER FUNCTION my_function COMPILE;ALTER TRIGGER my_trigger COMPILE;ALTER VIEW my_view COMPILE; 或者使用DBMS_DDL.alter_compile包 (不能重新编译view) EXEC DBMS_DDL.alter_compile('PACKAGE',包和触发器,DECODE(object_type, PROCEDURE RECOMP_SERIAL( schema IN VARCHAR2 DEFAULT NULL。
'MY_SCHEMA', 2, 1, 'MY_SCHEMA',一次一个对象, 匹配可用CPU的数量通常是此值的良好起点。
以下示例显示了如何使用这些过程,RECOMP_SERIAL过程一次重新编译所有无效对象,所有现有作业都标记为已禁用, 该程序包必须作为SYS用户从SQL * Plus或具有SYSDBA的其他用户运行。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。