我正在从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程序中无效。我需要授予的特权是什么?
我知道有控制检查点的参数,但我不想改变它们。我只想在清理过程中手动检查点。
答案 0 :(得分:1)
确保该过程归特权用户所有,并将其权限更改为以所有者权限运行。
这有点像Unix中的setuid程序。
syntax为CREATE PROCEDURE ... AUTHID DEFINER ...
。
上面由@a_horse_with_no_name和@tbone评论的备选方案是向运行该过程的用户授予ALTER SYSTEM
权限。