配置AWS DMS Binary Reader访问ASM做CDC遇TNS解析失败,如何通过SCAN授权?
解决AWS DMS通过SCAN访问ASM的TNS解析及权限问题
一、排查TNS解析失败的核心原因
数据库连接正常但ASM连接失败,说明SCAN的解析逻辑在ASM侧存在配置缺失:
- 检查Grid Infrastructure的SCAN监听状态:
登录Grid用户执行以下命令,确认SCAN监听正常运行且ASM实例已注册:
确保输出中ASM实例状态为srvctl status scan_listener srvctl config scan srvctl status asm -detailRUNNING,且SCAN监听已注册+ASM服务。 - 验证ASM SCAN的DNS解析:
在AWS VPC内的测试机器(如EC2)上执行tnsping <ASM_SCAN_NAME>,确认能解析到ASM节点的私有IP。如果解析失败,需检查VPC的DNS配置(如Route 53私有托管区)是否添加了ASM SCAN的A记录,指向所有ASM节点的私有IP。
二、配置ASM访问权限
DMS的ASM用户需要专属系统权限才能访问ASM存储:
- 授予ASM系统权限:
登录ASM实例(通过Grid用户或ASM SYSDBA用户),执行SQL命令为DMS用户授予权限:
(注:ASM_SYSASM权限用于完全管理ASM,ASM_SYSDBA足够满足CDC的读取需求)GRANT ASM_SYSDBA TO <DMS_ASM_USER>; - 配置ASM远程登录:
确保ASM实例的参数文件(spfile或init.ora)中设置:
重启ASM实例后,将ASM的密码文件(位于ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;$ORACLE_HOME/dbs/orapw+ASM)同步到所有ASM节点的相同目录,保证远程登录一致性。
三、调整DMS端点的ASM连接配置
- 连接字符串必须使用ASM的SCAN名称,格式示例:
注意:(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<ASM_SCAN_NAME>)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=+ASM)))SERVICE_NAME固定为+ASM(ASM默认服务名),不要使用数据库的服务名。 - 检查VPC安全组规则:
确保DMS所在的安全组允许出站访问ASM节点的TCP 1521端口;同时ASM节点的安全组允许DMS的IP/安全组访问1521端口。
四、验证连接有效性
在VPC内的EC2实例上安装Oracle客户端,配置TNS指向ASM SCAN,用DMS的ASM用户登录测试:
sqlplus <DMS_ASM_USER>/<PASSWORD>@<ASM_SCAN_TNS_ENTRY>
如果能成功登录,说明网络、权限、解析均正常,再重新配置DMS端点即可。
常见坑点
- 不要混淆数据库SCAN和ASM SCAN:如果Grid配置了独立的ASM SCAN,必须使用ASM专属的SCAN名称;若共用SCAN,需确认SCAN监听同时注册了数据库和ASM服务。
- 确认AWS DMS版本兼容你的Oracle ASM版本(如DMS 3.4.5及以上支持Oracle 12cR2+ ASM)。
内容的提问来源于stack exchange,提问作者M Sriram
相关产品推荐
相关产品推荐

