ORA-12537: TNS: connection closed



近期一次的存储异常断电导致了在双节点的RAC环境中,一个节点出现了ORA-12537: TNS: connection closed 错误。

环境:Oracle Linux 5.5 + oracle 11g + ASM

网上搜了一下也解决不了问题,最终在一个高手的协助下进行了故障排除,在此进行了记录。

[@more@]

[grid@racdb1 bin]$ exit

logout

-bash-3.2$ cd $ORACLE_HOME/bin

-bash-3.2$ ls -l oracle

-rwxrwsrwx 1 oracle asmadmin 232399431 10-25 11:14 oracle

-bash-3.2$ chmod 6751 oracle

-bash-3.2$ ls -l oracle

-rwsr-x--x 1 oracle asmadmin 232399431 10-25 11:14 oracle

-bash-3.2$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Thu Jan 17 12:40:36 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected.

SQL> exit

Disconnected

原因说明:

是因为$ORACLE_HOME/bin/oracle可执行文件的权限变更导致了该错误。

由于Oracle派生进程需要用到可执行文件oracle,所以该文件权限被修改之后派生进程会出现异常因为监听派生进程,本质上会调用到$ORACLE_HOME/bin/oracle可执行文件派生

一般监听发生问题不外乎检查如下四项

1、/etc/hosts及域名解析配置文件

2、监听日志大小

3、监听状态

4、$ORACLE_HOME/oracle可执行文件权限

### 解决 `TypeError: strptime() takes exactly 2 arguments (1 given)` 和 Oracle 数据库连接问题 #### 关于 `TypeError` 错误 此错误表明在调用 `strptime()` 方法时,未提供足够的参数。`strptime()` 方法需要两个参数:一个字符串形式的日期和一个格式化字符串[^1]。 以下是解决该问题的代码示例: ```python from datetime import datetime date_string = "2023-10-05" format_string = "%Y-%m-%d" # 格式化字符串 dt_object = datetime.strptime(date_string, format_string) # 正确传递两个参数 print(dt_object) ``` 确保在调用 `strptime()` 方法时始终提供两个参数,以避免此类错误。 --- #### 关于 DPI-1080 和 ORA-3113 错误 DPI-1080 和 ORA-3113 错误通常与 Oracle 数据库连接相关,具体表现为连接意外关闭或网络通信中断[^2]。 以下是一些可能的原因及解决方案: 1. **网络问题** 确保客户端和服务器之间的网络连接稳定。可以尝试使用 `ping` 命令测试网络延迟和连通性[^2]。 2. **超时设置** 如果查询时间过长,可能会触发超时机制。可以通过调整 `cx_Oracle` 的超时参数来延长连接时间: ```python import cx_Oracle dsn_tns = cx_Oracle.makedsn("host", "port", service_name="service_name") connection = cx_Oracle.connect(user="username", password="password", dsn=dsn_tns, events=True) # 设置超时时间为 60 秒 connection.clientinfo = "MyApp" connection.module = "MyModule" connection.action = "MyAction" connection.stmtcachesize = 100 connection.calltimeout = 60000 # 单位为毫秒 ``` 3. **数据库端问题** 检查数据库服务器是否正常运行,并确认是否有其他进程导致资源耗尽或连接被强制关闭[^2]。 4. **驱动版本兼容性** 确保使用的 `cx_Oracle` 版本与 Oracle 数据库版本兼容。可以参考官方文档验证版本兼容性[^3]。 5. **异常捕获与重试逻辑** 在代码中添加异常捕获和重试机制,以应对临时性连接问题: ```python import cx_Oracle import time def connect_to_oracle(): while True: try: dsn_tns = cx_Oracle.makedsn("host", "port", service_name="service_name") connection = cx_Oracle.connect(user="username", password="password", dsn=dsn_tns) print("Connection successful") return connection except cx_Oracle.DatabaseError as e: error, = e.args if error.code == 3113 or error.code == 1080: print("Connection closed. Retrying in 5 seconds...") time.sleep(5) else: raise ``` --- ### 总结 通过正确传递两个参数给 `strptime()` 方法,可以解决 `TypeError` 问题。对于 DPI-1080 和 ORA-3113 错误,建议从网络稳定性、超时设置、数据库端状态以及驱动版本兼容性等方面排查并解决问题[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值