SQL Server 2019 Polybase配置Oracle Exadata HA/DR连接咨询
解决Polybase连接Oracle Exadata HA/DR节点的故障转移方案
以下是两种可行的配置方案,实现Polybase对Oracle Exadata多节点的自动故障转移与负载均衡:
方案一:通过Oracle客户端TNS别名配置
这是最稳定的方式,利用Oracle客户端的TNS配置管理HA连接信息:
- 在SQL Server服务器上安装兼容的Oracle客户端(建议12c及以上版本,匹配Exadata的Oracle版本),并配置
tnsnames.ora文件(通常位于%ORACLE_HOME%\network\admin目录),添加HA连接配置:
OracleTNSName = (DESCRIPTION=(ENABLE=BROKEN)(ADDRESS_LIST=(LOAD_BALANCE=YES)(FAILOVER=YES)(ADDRESS=(PROTOCOL=tcp)(HOST=ExaData1.domain.com)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=ExaData2.domain.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=OracleTNSName)))
配置SQL Server服务账户的环境变量:
- 设置
ORACLE_HOME为Oracle客户端的安装路径 - 设置
TNS_ADMIN为tnsnames.ora所在的目录路径
完成后重启SQL Server服务,确保服务能读取到TNS配置。
- 设置
创建支持HA的外部数据源:
CREATE EXTERNAL DATA SOURCE [OracleDataSource] WITH (LOCATION = 'oracle://OracleTNSName', CREDENTIAL = [OracleCredential])
- 调整外部表定义(无需在LOCATION中指定TNS域名,直接使用Schema和表名):
CREATE EXTERNAL TABLE [Polybase].[sample] ( [SID] [nvarchar](8) NULL, [MESSAGE_DATE] [datetime2](7) NULL, [MESSAGE_ID] [nvarchar](3) NULL ) WITH (DATA_SOURCE = [OracleDataSource], LOCATION = N'OracleSchema.SAMPLE')
方案二:直接在外部数据源LOCATION中使用完整TNS连接串
如果不想部署Oracle客户端,可以尝试直接将完整的TNS连接串作为LOCATION的值:
CREATE EXTERNAL DATA SOURCE [OracleDataSource] WITH (LOCATION = 'oracle:///(DESCRIPTION=(ENABLE=BROKEN)(ADDRESS_LIST=(LOAD_BALANCE=YES)(FAILOVER=YES)(ADDRESS=(PROTOCOL=tcp)(HOST=ExaData1.domain.com)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=ExaData2.domain.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=OracleTNSName)))', CREDENTIAL = [OracleCredential])
外部表定义与方案一相同,无需额外修改。
验证方法
配置完成后,执行外部表查询验证连接正常,之后手动停止ExaData1节点的Oracle服务,再次查询外部表,确认连接自动切换到ExaData2节点,故障转移生效。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

