【发布时间】:2018-03-13 16:39:42
【问题描述】:
问题:“ORA-02376:无效或冗余资源”出现在执行立即 (v_sql_stmt) 语句上。
已执行故障排除:包括 dbms_output.out_line (v_sql_stmt),它会从阵列中生成格式正确的命令,并且在复制 dbms 输出以在阵列外部单独手动运行命令时 - 9 个 alter profile 命令成功执行。此外,将数组减少到只有一个值(failed_login_attempts 3),ORA 错误仍然发生在执行立即语句上(不是真正的具有一个值的数组,只是试图排除故障)。 ORA-02376 的研究表明“未定义或指定两次的资源出现在 create 或 alter profile 语句中”。 dbms_output.put_line 显示没有两次指定任何资源,并且由于命令在数组外成功运行,我的想法是它们已定义。
问题:知道为什么 ORA-02376 出现在执行立即 (v_sql_stmt) 命令上吗?
声明 TYPE array_n 是 VARRAY (9) OF VARCHAR2 (29);
array array_n
:= array_n ('failed_login_attempts 3',
'idle_time 15',
'password_grace_time 5',
'password_life_time 35',
'password_lock_time unlimited',
'password_reuse_max 1024',
'password_reuse_time 365',
'password_verify_function null',
'sessions_per_user 1024');
v_sql_stmt VARCHAR (90);
v_env VARCHAR2 (10);
v_date DATE;
开始 SELECT environment INTO v_env FROM core.site;
IF v_env = 'PROD'
THEN
FOR i IN 1 .. array.COUNT
LOOP
v_sql_stmt := 'alter profile default limit ' || array (i) || ';';
DBMS_OUTPUT.put_line (v_sql_stmt);
EXECUTE IMMEDIATE (v_sql_stmt);
END LOOP;
ELSE
SELECT SYSDATE INTO v_date FROM DUAL;
DBMS_OUTPUT.put_line (v_date);
END IF;
结束;
第 2 行出错 ORA-02376: 无效或冗余资源 ORA-06512: 在第 27 行
【问题讨论】: