我正在从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 回答
确保该过程归特权用户所有,并将其权限更改为以所有者权限运行 .
这有点像Unix中的setuid程序 .
syntax是
CREATE PROCEDURE ... AUTHID DEFINER ...
.如上所述,@ a_horse_with_no_name和@tbone的替代方法是向运行该过程的用户授予
ALTER SYSTEM
特权 .