news 2026/5/15 12:28:18

ODA/Oracle 19c CDB/PDB 环境下报错ORA-65162:common user密码过期问题排查与处理_2026-05-15

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ODA/Oracle 19c CDB/PDB 环境下报错ORA-65162:common user密码过期问题排查与处理_2026-05-15

1、问题现象

业务系统连接 Oracle 数据库时失败,页面提示类似:

ORA-65162: The password of the common user has expired

从报错可以看出,这不是网络端口问题,也不是监听服务异常,而是Oracle common user 密码过期

本次涉及两个 CDB:

MESCDB UTF8CDB

相关用户为:

C##MESCDBFLINK C##UTF8CDBFLINK

这类C##开头的用户,一般属于CDB common user


二、确认当前 CDB/PDB 环境

登录数据库服务器后,进入对应实例:

su - oracle export ORACLE_SID=mescdb1 sqlplus / as sysdba

查看 PDB:

show pdbs;

示例结果:

CON_ID CON_NAME OPEN MODE ------ -------- ---------- 2 PDB$SEED READ ONLY 3 MESDB READ WRITE 5 RZMESDB READ WRITE

确认当前容器:

show con_name;

如果是 common user,建议在CDB$ROOT下处理。

alter session set container=CDB$ROOT;

三、查询用户状态

先通过cdb_users查询用户状态:

set lines 200 pages 200 col con_name for a15 col username for a35 col account_status for a30 col expiry_date for a20 col profile for a25 col common for a8 select u.con_id, c.name con_name, u.username, u.account_status, u.expiry_date, u.profile, u.common from cdb_users u join v$containers c on u.con_id = c.con_id where u.username = upper('C##MESCDBFLINK') order by u.con_id;

排查结果如下:

CON_ID CON_NAME USERNAME ACCOUNT_STATUS EXPIRY_DATE PROFILE COMMON ------ -------- -------------- -------------- ------------------- ------- ------ 1 CDB$ROOT C##MESCDBFLINK EXPIRED 2026-05-13 09:57:06 DEFAULT YES 3 MESDB C##MESCDBFLINK OPEN DEFAULT YES 5 RZMESDB C##MESCDBFLINK OPEN DEFAULT YES

这里可以明确看出:

CDB$ROOT 下账号状态为 EXPIRED

虽然 PDB 中显示为OPEN,但是 common user 在 CDB$ROOT 中密码过期后,连接 PDB 仍然会失败。


四、创建专用 Profile,设置密码永不过期

生产环境不建议直接修改DEFAULTprofile,因为可能影响其他用户。

更稳妥的方式是:单独创建业务账号专用 profile

alter session set container=CDB$ROOT;

先检查 profile 是否存在:

select profile from dba_profiles where profile = 'C##APP_PROFILE' group by profile;

如果不存在,创建:

create profile C##APP_PROFILE limit PASSWORD_LIFE_TIME UNLIMITED PASSWORD_GRACE_TIME UNLIMITED;

说明:

PASSWORD_LIFE_TIME UNLIMITED 表示密码永不过期 PASSWORD_GRACE_TIME UNLIMITED 表示不进入密码过期宽限期

五、将 common user 切换到新 Profile

C##MESCDBFLINK为例:

alter user C##MESCDBFLINK profile C##APP_PROFILE container=all;

然后使用原密码重置并解锁:

alter user C##MESCDBFLINK identified by "原密码" account unlock container=all;

如果密码中包含特殊字符,比如#,必须使用双引号包起来:

alter user C##MESCDBFLINK identified by "******" account unlock container=all;

注意:
这里建议使用原密码重置,这样业务系统连接配置不用同步修改。


六、验证处理结果

再次查询用户状态:

select u.con_id, c.name con_name, u.username, u.account_status, u.expiry_date, u.profile, u.common from cdb_users u join v$containers c on u.con_id = c.con_id where u.username = 'C##MESCDBFLINK' order by u.con_id;

正常结果应类似:

CON_ID CON_NAME USERNAME ACCOUNT_STATUS EXPIRY_DATE PROFILE COMMON ------ -------- -------------- -------------- ----------- --------------- ------ 1 CDB$ROOT C##MESCDBFLINK OPEN C##APP_PROFILE YES 3 MESDB C##MESCDBFLINK OPEN C##APP_PROFILE YES 5 RZMESDB C##MESCDBFLINK OPEN C##APP_PROFILE YES

重点看三项:

ACCOUNT_STATUS = OPEN EXPIRY_DATE 为空 PROFILE = C##APP_PROFILE

再确认 profile 策略:

select profile, resource_name, limit from dba_profiles where profile = 'C##APP_PROFILE' and resource_name in ( 'PASSWORD_LIFE_TIME', 'PASSWORD_GRACE_TIME', 'FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LOCK_TIME' ) order by resource_name;

示例结果:

PROFILE RESOURCE_NAME LIMIT --------------- --------------------- --------- C##APP_PROFILE FAILED_LOGIN_ATTEMPTS DEFAULT C##APP_PROFILE PASSWORD_GRACE_TIME UNLIMITED C##APP_PROFILE PASSWORD_LIFE_TIME UNLIMITED C##APP_PROFILE PASSWORD_LOCK_TIME DEFAULT

这里说明:

密码已经永不过期; 但如果密码连续输错,仍然可能按 DEFAULT 策略锁定。

七、CDB common user 和 PDB local user 的区别

本次处理的两个用户:

C##MESCDBFLINK C##UTF8CDBFLINK

都属于 common user,特点是:

用户名以 C## 开头 COMMON = YES

这种用户应在:

CDB$ROOT

中处理,并使用:

container=all

例如:

alter user C##MESCDBFLINK profile C##APP_PROFILE container=all;

如果是普通业务用户,例如:

STEELMES MES_ADMIN HYTOMES QMS LZMES RZMES

如果查询结果为:

COMMON = NO

则说明它们是PDB local user,只属于某个具体 PDB。

这类用户不需要在 CDB$ROOT 中修改,直接切换到所属 PDB 处理即可:

alter session set container=MESDB; create profile APP_PROFILE limit PASSWORD_LIFE_TIME UNLIMITED PASSWORD_GRACE_TIME UNLIMITED; alter user STEELMES profile APP_PROFILE;

如果账号已过期或锁定,再用原密码重置解锁:

alter user STEELMES identified by "原密码" account unlock;

八、总结

本次问题的核心原因是:

Oracle CDB common user 在 CDB$ROOT 中密码过期,导致业务系统连接 PDB 失败。

关键排查 SQL:

select u.con_id, c.name con_name, u.username, u.account_status, u.expiry_date, u.profile, u.common from cdb_users u join v$containers c on u.con_id = c.con_id where u.username = upper('用户名') order by u.con_id;

关键处理思路:

common user:在 CDB$ROOT 中处理,使用 container=all local user :进入对应 PDB 中处理,不使用 container=all

最终处理方式:

创建专用 profile 设置 PASSWORD_LIFE_TIME 为 UNLIMITED 设置 PASSWORD_GRACE_TIME 为 UNLIMITED 将业务连接用户切换到该 profile 使用原密码重置并解锁账号

一句话总结:
C## 用户看 CDB$ROOT,普通业务用户进 PDB;谁家的账号谁家管,别在生产环境里乱改 DEFAULT。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 12:21:21

AI编程助手深度配置:基于Cursor打造专属智能开发环境

1. 项目概述:当AI助手遇上代码编辑器最近在GitHub上看到一个挺有意思的项目,叫mk-knight23/AI-ASSISTANT-CURSOR。光看名字,你大概能猜到它和AI编程助手、Cursor编辑器有关。没错,这本质上是一个为Cursor编辑器深度定制的AI助手配…

作者头像 李华
网站建设 2026/5/15 12:21:08

估值315亿!田渊栋AI创业,谷歌、英伟达和AMD参投

Meta离职后的AI技术大牛田渊栋,去向一直备受关注。刚刚,他亲自官宣了创业。25名顶级研究人员和工程师,踏上了同一条船Recursive Superintelligence(递归超级智能,RSI)。他们坚信“构建自动发现知识并递归改…

作者头像 李华
网站建设 2026/5/15 12:19:58

量子噪声模拟与张量网络近似算法实践

1. 量子噪声模拟与等价性检查的技术背景量子计算作为下一代计算范式,其核心优势在于利用量子叠加和纠缠效应解决经典计算机难以处理的问题。然而,当前NISQ(Noisy Intermediate-Scale Quantum)时代的量子处理器存在显著的噪声干扰&…

作者头像 李华
网站建设 2026/5/15 12:19:30

[因果推断] 倾向得分匹配PSM实战:从ATT估算到增量模型搭建

1. 为什么需要倾向得分匹配? 在真实业务场景中,我们常常遇到这样的困境:某个产品功能已经全量上线,想要评估它对用户留存的影响,却发现无法找到完美的对照组。这时候,倾向得分匹配(PSM&#xf…

作者头像 李华