数据库hang死,前面报错ORA-12570: TNS:packet reader failure

本文记录了一次Oracle数据库出现连接问题的现象及初步排查过程。主要表现为sdh_ora_29241.trc文件异常增大,并且远程无法通过监听器连接数据库。重启服务器后问题得到暂时解决,但未找到根本原因。

仔细看了问题,发现sdh_ora_29241.trc这个dump文件在我重启服务器之前一直在扩大,然后是本地能连上数据库,二通过监听则不能连接数据库。重启后正常。

alert.log如下:

Wed Dec 15 08:02:41 2010
Errors in file /oracle/app/oracle/admin/sdh/udump/sdh_ora_29241.trc:
---此文件sdh_ora_29241.trc有3G大

ORA-12570: TNS:packet reader failure
Wed Dec 15 09:17:25 2010
Failure to extend rollback segment 27 because of 3113 conditionFULL status of rollback segment 27 set.
Wed Dec 15 09:38:52 2010
Failure to extend rollback segment 30 because of 3113 conditionFULL status of rollback segment 30 set.

故障记录于此,待分析。。。

--------------------------------------------

由于此问题现象没找到对应的故障解决方案,咨询oracle,提出了监控方案,记录如下,待下次故障发生

Can you able to reproduce this issue If yes please do provide the following,

Please set the following parameter in sqlnet.ora (server / client side) and then reproduce the error.

To enable SQL*Net tracing, add the following lines to $ORACLE_HOME/network/admin/sqlnet.ora on the machine:

Server (add to server’s sqlnet.ora):
trace_level_server=16
trace_directory_server=*
trace_file_server=*

(or)

Client (add to sqlnet.ora):
trace_level_client=16
trace_directory_client=*
trace_file_client=*

and upload the trace file

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11088128/viewspace-681864/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11088128/viewspace-681864/

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)`。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值