首页 文章

如何从PL / SQL执行检查点

提问于
浏览
0

我正在从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 回答

  • 1

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

    这有点像Unix中的setuid程序 .

    syntaxCREATE PROCEDURE ... AUTHID DEFINER ... .

    如上所述,@ a_horse_with_no_name和@tbone的替代方法是向运行该过程的用户授予 ALTER SYSTEM 特权 .

相关问题