我从PL/SQL执行清理操作,这往往会填满我的重做日志,导致数据库冻结在“无法分配新日志”条件。如何从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程序。我需要授予什么特权?
我知道有控制点检查的参数,但我不想改变这些。我只想在清理期间手动检查点。
来自角色的权限在存储过程内无效。您需要直接授予'alter system'特权。 –
尝试创建过程cp authid current_user as ...(或者a_horse_with_no_name建议直接向用户授予) – tbone
对于PL/SQL,角色被禁用,并且通过角色授予的任何特权不适用,除非您使用AUTHID CURRENT_USER创建过程,在这种情况下,角色特权确实适用。 – tbone