Oracle 12c执行CREATE PROFILE语句遇ORA-02376错误求助
解决Oracle 12.1中CREATE PROFILE的ORA-02376错误
问题原因
你遇到的ORA-02376: invalid or redundant resource错误,是因为CREATE PROFILE语句中使用了INACTIVE_ACCOUNT_TIME参数——这个参数是Oracle 12c R2(12.2.0.1及以上版本)才新增的资源限制项,而你的数据库版本是12.1.0.2.0,不支持该参数,因此被判定为无效资源。
解决方案
方案1:修改CREATE PROFILE语句
直接移除语句中的INACTIVE_ACCOUNT_TIME 3024000部分,修改后的可执行语句如下:
CREATE PROFILE "ORA_STIG_PROFILE" LIMIT COMPOSITE_LIMIT DEFAULT SESSIONS_PER_USER DEFAULT CPU_PER_SESSION DEFAULT CPU_PER_CALL DEFAULT LOGICAL_READS_PER_SESSION DEFAULT LOGICAL_READS_PER_CALL DEFAULT IDLE_TIME 15 CONNECT_TIME DEFAULT PRIVATE_SGA DEFAULT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LIFE_TIME 5184000/86400 PASSWORD_REUSE_TIME 31536000/86400 PASSWORD_REUSE_MAX 10 PASSWORD_LOCK_TIME UNLIMITED PASSWORD_GRACE_TIME 432000/86400;
方案2:模拟INACTIVE_ACCOUNT_TIME功能(12.1版本)
如果需要实现“闲置账户自动锁定”的功能,12.1版本可以通过定时任务手动实现:
- 创建PL/SQL存储过程,检查用户最后登录时间,对超过指定时长未登录的用户执行锁定:
CREATE OR REPLACE PROCEDURE LOCK_INACTIVE_USERS IS BEGIN FOR user_rec IN ( SELECT username FROM dba_users WHERE last_login <= SYSDATE - (3024000/86400) -- 对应原参数的3024000秒(35天) AND account_status = 'OPEN' AND username NOT IN ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP') -- 排除系统核心用户 ) LOOP EXECUTE IMMEDIATE 'ALTER USER ' || user_rec.username || ' ACCOUNT LOCK'; END LOOP; END; /
- 创建定时任务,定期执行上述存储过程(示例为每天凌晨2点执行):
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'LOCK_INACTIVE_USERS_JOB', job_type => 'STORED_PROCEDURE', job_action => 'LOCK_INACTIVE_USERS', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY;BYHOUR=2;BYMINUTE=0;BYSECOND=0', enabled => TRUE, comments => 'Lock users who have not logged in for 35 days' ); END; /
内容的提问来源于stack exchange,提问作者ddelafuente
相关产品推荐
相关产品推荐

