如何从PL / SQL执行检查点

时间:2013-09-23 16:03:35

标签: oracle

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

将工作分成较小的块并没有解决问题,因为重做日志文件保持status = ACTIVE和ARCHIVED = YES太长时间。只有在“更改系统检查点”之后,脏日志才会写入磁盘并再次可用于下一个块。

现在,我该如何从PL / SQL执行此操作。我试过了

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

但它给了我ORA-01031: insufficient privileges

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

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

1 个答案:

答案 0 :(得分:1)

确保该过程归特权用户所有,并将其权限更改为以所有者权限运行。

这有点像Unix中的setuid程序。

syntaxCREATE PROCEDURE ... AUTHID DEFINER ...

上面由@a_horse_with_no_name和@tbone评论的备选方案是向运行该过程的用户授予ALTER SYSTEM权限。