0

我正在从 PL/SQL 执行清理操作,这往往会填满我的重做日志,导致数据库在“无法分配新日志”条件下冻结。

将工作分成更小的块并不能解决问题,因为重做日志文件停留在 status=ACTIVE 和 ARCHIVED=YES 的时间过长。只有在“alter system checkpoint”之后,脏日志才会被写入磁盘并再次可供下一个块使用。

现在,我怎样才能从 PL/SQL 中做到这一点。我试过

create procedure cp as begin execute immediate 'alter system checkpoint'; end;

但它给了我ORA-01031: insufficient privileges

我有 DBA 角色,但这在 PL/SQL 过程中无效。我需要授予什么特权?

我知道有控制检查点的参数,但我不想更改这些。我只想在清理过程中手动检查点。

4

1 回答 1

1

确保该过程由特权用户拥有,并更改其权限以使用所有者权限运行。

这有点像 Unix 中的 setuid 程序。

语法CREATE PROCEDURE ... AUTHID DEFINER .... _

正如上面@a_horse_with_no_name 和@tbone 所评论的那样,另一种选择是授予ALTER SYSTEM运行该过程的用户特权。

于 2013-09-23T16:07:13.020 回答