从windows客户端sqlplus连接Oracle 12c PDB报错ORA-65162: The password has expired

本文详细阐述了在使用Windows客户端SQLPLUS连接Oracle12cPDB时遇到ORA-65162错误码的情况,解释了其含义并提供了有效的解决方法。通过直接搜索官方文档和理解错误原因,用户可以快速定位并修复密码过期导致的连接失败问题。
从windows客户端sqlplus连接Oracle 12c PDB报错ORA-65162: The password has expired

C:\Users\Administrator>sqlplus system/aaaaaa@to12c_pdb_pn1

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 2月 13 09:28:27 2016

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

ERROR:
ORA-65162: The password has expired.

请输入用户名:

看到The password has expired,感觉对应的错误码应该是ora-28001,此处却是出现的ORA-65162,感觉一头雾水

于是立即到mos(support.oracle.com)搜索一把,搜索结果只有2个,还是在Oracle Zero Data Loss Recovery Appliance Administrator's Guide这里
http://docs.oracle.com/cd/E55822_01/AMAGD/amagd_errors.htm#AMAGD1442
ORA-65162: The password has expired.
Cause: The user's account expired and the password needs to be changed by connecting to the root of the multitenant container database
Action: Change the password or contact the DBA.

再想一想,ora-65开头的,之前从来没遇到过,再从如上网址中,搜索ora-65000
ORA-65000: missing or invalid pluggable database name
Cause: A valid pluggable database name was not present where required.
Action: Reissue the statement with a valid pluggable database name.
心里也就明白了一点,推测如下:
ora-65XXX是针对PDB的错误码
ORA-12514 错误通常表示 Oracle 客户端尝试连接数据库时,监听器无法识别请求的服务名或 SID。在 Oracle 12c 中,由于引入了多租户架构(CDB/PDB),服务名的配置和连接方式与传统数据库有所不同,因此需要特别注意配置细节。 ### 问题原因分析 - **监听器未正确配置服务名**:监听器的 `listener.ora` 文件中未定义 PDB 对应的 `SID_LIST` 或 `GLOBAL_DBNAME`。 - **服务名未在数据库中注册**:PDB 的服务名未在数据库中注册,导致监听器无法动态注册该服务。 - **连接字符串配置错误**:客户端的 `tnsnames.ora` 中配置的服务名与数据库服务名不一致。 - **监听器未启动或未重新加载配置**:监听器服务未启动或未加载更新后的配置文件。 ### 解决方法 #### 1. 修改 `listener.ora` 文件 确保监听器配置文件中包含 CDB 和 PDB 的服务注册信息。以 Oracle 12c 为例,修改 `/network/admin/listener.ora` 文件,添加如下内容: ```ini SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) # CDB 服务名 (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = orcl) ) (SID_DESC = (GLOBAL_DBNAME = pdborcl) # PDB 服务名 (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = pdborcl) ) ) ``` 保存文件后,重启监听器服务以应用更改: ```bash lsnrctl stop lsnrctl start ``` #### 2. 检查数据库服务注册状态 连接到数据库并查询当前注册的服务名: ```sql SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select name, pdb from v$services; NAME PDB -------------------------------- -------------------- orcl CDB$ROOT pdborcl PDBORCL ``` 确保 `pdborcl` 服务名已注册。如果没有注册,可以手动注册: ```sql SQL> alter system set service_names='pdborcl' scope=both; ``` #### 3. 配置客户端 `tnsnames.ora` 在客户端的 `tnsnames.ora` 文件中添加 PDB连接描述符: ```ini PDBORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl) ) ) ``` #### 4. 使用 SQL*Plus 验证连接 尝试使用 `tnsping` 和 `sqlplus` 测试连接: ```bash tnsping pdborcl sqlplus username/password@pdborcl ``` #### 5. 检查监听器状态 使用以下命令查看监听器是否识别 PDB 服务: ```bash lsnrctl status ``` 在输出中应看到 `Service "pdborcl" has 1 instance(s)`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值