执行表空间创建脚本时遇ORA-12609:TNS接收超时错误求助
问题分析与解决方案
问题概述
在Oracle 19c ASM环境中执行从Oracle 12c ASM环境生成的表空间创建脚本时,触发ORA-12609: tns: receive timeout occurred错误。即使在sqlnet.ora中设置了超时参数(SQLNET.INBOUND_CONNECT_TIMEOUT=3600、SQLNET.RECV_TIMEOUT=3600、SQLNET.SEND_TIMEOUT=3600),仍会在20秒后报错,告警日志同时记录ORA-1013及ASM根目录相关注记。
创建表空间脚本:
CREATE TABLESPACE ARCH DATAFILE '+DATA' SIZE 11400M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING DEFAULT NO INMEMORY ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;
排查与解决步骤
1. 排查ASM磁盘组IO性能瓶颈
创建11.4GB的数据文件需要大量IO操作,若ASM磁盘组IO延迟过高,会直接导致会话超时:
- 查询ASM磁盘组读写性能:
SELECT dg.name, df.path, df.read_time, df.write_time, df.reads, df.writes FROM v$asm_diskgroup dg JOIN v$asm_disk df ON dg.group_number = df.group_number WHERE dg.name = 'DATA'; - 临时减小初始数据文件大小(如改为
1000M)测试,若能成功执行,说明原问题由IO超时导致,需进一步排查存储设备故障、链路带宽或磁盘负载问题。
2. 同步客户端与服务器端的超时配置
仅修改服务器端sqlnet.ora不足以覆盖所有超时场景,需同步配置客户端:
- 在客户端的
sqlnet.ora中添加:SQLNET.RECV_TIMEOUT=3600 SQLNET.SEND_TIMEOUT=3600 - 检查
listener.ora中的INBOUND_CONNECT_TIMEOUT_<listener_name>参数,确保其值与sqlnet.ora中的SQLNET.INBOUND_CONNECT_TIMEOUT一致,避免监听层面提前截断会话。
3. 验证ASM磁盘组兼容性参数
Oracle 19c ASM的兼容性设置可能与12c脚本的行为不匹配:
- 查询当前ASM兼容性配置:
SELECT name, compatibility, database_compatibility FROM v$asm_diskgroup; - 若
compatibility低于19.0.0.0.0,可尝试升级(操作前需确认业务兼容,升级后无法回退):ALTER DISKGROUP DATA SET ATTRIBUTE 'compatibility.asm' = '19.0.0.0.0'; ALTER DISKGROUP DATA SET ATTRIBUTE 'compatibility.rdbms' = '19.0.0.0.0';
4. 检查会话级超时参数
部分会话级参数可能覆盖全局配置:
- 查询当前会话的超时相关参数:
SELECT name, value FROM v$parameter WHERE name LIKE '%timeout%'; - 若存在短超时设置,可在执行建表空间脚本前临时修改:
ALTER SESSION SET RECV_TIMEOUT=3600;
5. 确认ASM磁盘组挂载状态与通信
告警日志中重复出现NOTE: Using default ASM root directory ASM,需验证ASM与数据库实例的通信:
- 检查ASM磁盘组状态:
SELECT group_number, name, state FROM v$asm_diskgroup; - 确保
DATA磁盘组处于MOUNTED状态,且ASM实例与数据库实例的连接正常。
内容的提问来源于stack exchange,提问作者Hung Tran
相关产品推荐
相关产品推荐

