【发布时间】: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