必须用alter profile修改default profile参数,alter user仅能切换用户绑定的profile;资源类参数需启用resource_limit才生效,密码类参数始终生效,修改后仅对新会话或下次登录生效。

不能用 ALTER USER 修改 DEFAULT Profile 的参数,必须用 ALTER PROFILE。 所有对密码策略(如 PASSWORD_LIFE_TIME)或资源限制(如 IDLE_TIME)的调整,都只能通过更新 Profile 本身完成;ALTER USER ... PROFILE DEFAULT 只是绑定用户到该 Profile,不改变其定义。
修改 DEFAULT Profile 前必须确认 RESOURCE_LIMIT 已启用
Profile 中的资源类参数(如 CPU_PER_SESSION、IDLE_TIME)只有在数据库启用了资源限制时才生效。默认情况下 RESOURCE_LIMIT 是 FALSE:
- 检查当前值:
SHOW PARAMETER resource_limit - 临时启用:
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; - 若需永久生效,需在初始化参数文件(
init<sid>.ora</sid>或 SPFILE)中添加resource_limit=true
没开这个参数,改了 IDLE_TIME 或 CONNECT_TIME 也完全不会触发断连或超时。
ALTER PROFILE DEFAULT LIMIT 的写法和常见错误
ALTER PROFILE 语句必须显式列出要修改的参数,未提及的参数保持原值(不是重置为 DEFAULT)。常见踩坑点:
- 参数名大小写不敏感,但必须拼写准确,比如
PASSWORD_LIFE_TIME写成PASSWORD_LIFETIME会报ORA-00922 - 数值单位隐含:时间类是「天」或「分钟」,CPU 类是「百分之一秒」,别混淆
-
UNLIMITED和DEFAULT不同:DEFAULT表示继承 Profile 定义时的默认值(通常是无限制),而UNLIMITED是明确不限制 - 执行后立即写入数据字典,但不会影响已登录会话——已连接用户仍按旧规则运行,直到下次登录或资源检查点触发
例如把默认密码有效期改为永不过期,并收紧失败尝试次数:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED FAILED_LOGIN_ATTEMPTS 5;
修改后如何验证是否生效
别只看命令有没有报错,重点查三处:
- 确认 Profile 定义已更新:
SELECT RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT' AND RESOURCE_TYPE IN ('KERNEL', 'PASSWORD'); - 确认目标用户确实绑定了 DEFAULT:
SELECT profile FROM DBA_USERS WHERE username = 'APP_USER'; - 检查用户当前会话是否已应用新策略:已登录用户不会被踢出,也不会重置失败计数器;真正生效时机是下次登录(密码类)或下一次资源申请(如新建会话、执行长 SQL)
INACTIVE_ACCOUNT_TIME(12.2+)这类新参数,只对新登录生效,且依赖后台任务扫描,不是实时响应。
Profile 参数改得再细,只要用户还在用旧会话,就看不到效果。生产环境批量调整前,最好先在测试库验证 DBA_PROFILES 查询结果与预期一致,并观察几个典型用户下次登录的行为变化。











