59. In your database, the current status of a PL/SQL procedure has become INVALID. Which action
would fix the problem and make the PL/SQL procedure usable?
A.Recompile the PL/SQL procedure.
B.Modify the procedure to run with a definer's right.
C.Modify the procedure to run with an invoker's right.
D.Grant the EXECUTE privilege on the PL/SQL procedure to PUBLIC.
Answer: A
答案解析:
参考:http://blog.csdn.net/rlhua/article/details/12561191
即PL/SQL procedure 变成无效时,可以自动或手动重新编译,就可以再次被使用。
无效PL/SQL 对象:可通过查询数据字典来查看PL/SQL 对象的当前状态。可使用以下命令行查找到无效PL/SQL 对象:
SELECT object_name, object_type FROM DBA_OBJECTS WHERE status = 'INVALID';
默认情况下,每24 小时会检查一次“所有者的无效对象计数”度量。如果单个所有者的对象数超过两个,就会发出预警。
如果查找到INVALID状态的PL/SQL 对象,需要回答的第一个问题是“此对象曾经是VALID的吗?”应用程序开发人员常常会忘记清除不起作用的代码。如果PL/SQL 对象因代码错误而无效,则除了纠正代码错误之外,没有什么别的方法。如果该过程在过去曾经有效,最近才变为无效,则可选择以下两种方法解决这个问题:
• 不做任何处理。如果需要,大多数PL/SQL 对象在被调用时会自动重新编译。用户在对象重新编译时会经历短暂的延迟。(大多数情况下,这种延迟不十分明显。)
• 手动重新编译无效对象。
使用Enterprise Manager 或通过SQL 命令可手动重新编译无效的PL/SQL 对象:
ALTER PROCEDURE HR.add_job_history COMPILE;
手动重新编译PL/SQL 数据包,需要执行以下两个步骤:
ALTER PACKAGE HR.maintainemp COMPILE;
ALTER PACKAGE HR.maintainemp COMPILE BODY;