【问题标题】:Unable to query AS400 over ODBC with PolyBase on SQL 2019 Linux无法在 SQL 2019 Linux 上使用 PolyBase 通过 ODBC 查询 AS400
【发布时间】:2021-11-14 06:29:09
【问题描述】:

我想在运行在 Ubuntu 容器中的 SQL Server 2019 实例上创建外部表,以查询 AS400 上的 DB2 数据库。我正在使用 ibm iaccess 1.1.0.15 amd64 ODBC 驱动程序。当我尝试创建外部表时,我得到以下错误:

消息 105082,第 16 级,状态 1,第 15 行
105082;通用 ODBC 错误:NativeOdbcConnection.Open,OdbcConnectionCreate 中的错误:SqlState:,NativeError:111234,'错误调用:SQLDriverConnect(this->_hdbc, NULL, (SQLWCHAR*)connectionString, SQL_NTS, NULL, 0, &cbConnStrOut, SQL_DRIVER_NOPROMPT) , SQL 返回码:-1 | SQL 错误信息:**内部 DmsNative 错误:返回的 SQLGetDiagRec:-1 |连接池:1 |调用错误:pConn->Create(connectionString, databaseName, useConnectionPooling, packetSize, connectionLoginTimeout, environmentSettings, transactionToken, transactionTokenSize, resourceGroupName, driverCapabilities, spid) |状态:FFFF,数量:1,活动连接:1',连接字符串:Driver={IBM i Access ODBC Driver};system=MYAS400SYSTEM;uid=MYAS400UID;server=MYAS400.MYDOMAIN.com。

这是我正在使用的 Dockerfile

# SQL Server Command Line Tools - custom image
# From Ubuntu 20.04 as base image
FROM ubuntu:20.04 as base

# Installing system utilities
RUN apt-get update && \
    apt-get install -y apt-transport-https curl gnupg && \
    # Adding custom MS repository
    curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
    curl https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list > /etc/apt/sources.list.d/mssql-server-2019.list && \
    curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | tee /etc/apt/sources.list.d/msprod.list
# From base image
FROM base as release

# Add the SQL startup scripts
COPY . /usr/src/app

COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh

# Grant permissions for the setupsql script to be executable
RUN chmod +x /usr/src/app/setupsql.sh

# Installing SQL Server drivers and tools
RUN apt-get update 
RUN apt-get install -y mssql-server-polybase
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
RUN ACCEPT_EULA=Y apt-get install -y mssql-tools 
# Install the IBM iAccess ODBC Driver
RUN dpkg -i /usr/src/app/ibm-iaccess-1.1.0.15-1.0.amd64.deb
RUN apt-get install -f
# Cleanup the Dockerfile
RUN apt-get clean && \
    rm -rf /var/lib/apt/lists

CMD exec /bin/bash entrypoint.sh

我可以使用 SSMS 通过本地主机连接到容器中的 SQL 服务器实例。创建凭证和数据源均成功。创建外部表是我得到错误的地方。

这里是创建外部数据源和外部表的 SQL 脚本:

CREATE DATABASE SCOPED CREDENTIAL AS400Credential
WITH IDENTITY = 'AS400UID',
SECRET = 'AS400PWD';  
GO

CREATE EXTERNAL DATA SOURCE MYAS400 WITH (LOCATION = 'odbc://MYAS400.MYDOMAIN.com', 
   CONNECTION_OPTIONS = 'DRIVER={IBM i Access ODBC Driver};SYSTEM=MYAS400;', 
   PUSHDOWN = OFF,
   CREDENTIAL = AS400CREDENTIAL);
GO

CREATE EXTERNAL TABLE EXT.Test 
(
    hstr NCHAR(50) NOT NULL,
    hreg NCHAR(50) NOT NULL,
    htr# NCHAR(50) NOT NULL,
    httm NCHAR(50) NOT NULL
)
WITH ( LOCATION='MYAS400DATABASE.SCHEMA.TABLE', DATA_SOURCE= MYAS400)

关于如何使用 PolyBase 成功连接到 AS400 有什么想法吗?

【问题讨论】:

  • 此 ODBC 连接是否在 Polybase 外部工作?
  • 是的,我可以在容器内部的命令行中使用 IBM i Access ODBC 驱动程序和 isql 连接到 AS400。此命令连接没有问题:``` isql -v -k "DRIVER={IBM i Access ODBC Driver};System=MYAS400;UID=MYUID;PWD=MIPWD;" ```

标签: sql-server docker odbc db2-400 polybase


【解决方案1】:

PolyBase Generic ODBC 连接目前仅在 Windows 上可用。

此功能需要 Windows 上的 SQL Server。

Configure PolyBase to access external data with ODBC generic types

目前Linked Server to non-SQL Server targets, and External Access and Unsafe CLR 也仅适用于 Windows。

您可以使用Python extensibilitypyodbc 来查询您的iSeries。

【讨论】:

  • 我的最终目标是将其作为 Azure 容器实例运行。但是,Windows 容器不能从 Azure 容器实例加入虚拟网络,只能加入基于 linux 的容器。
  • Windows 容器上的 SQL Server 在任何情况下都不受官方支持。
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 2012-07-31
  • 2011-06-18
  • 2020-06-01
  • 2019-04-24
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多