我需要从 Ubuntu Server 16.04 访问带有 OGR2OGR 的 Microsoft SQL Server。它在微软上工作,所以基本设置很好。
我的问题是,当我运行我的 OGR2OGR 命令时(在使用 sudo apt-get install gdal-bin 安装 GDAL 之后):
ogr2ogr -overwrite -f MSSQLSpatial "MSSQL:server=tcp:<DATABASE_SERVER>,<PORT>;database=<DATABASE_NAME>;uid=<USER>;Pwd=<PASSWORD>;" "<IMPORT PATH FILE>" -nln "<TABLE NAME>" -progress
我得到错误:
错误 1:无法初始化与 MSSQL 的服务器的连接:“DATABASE_SERVER”;[unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found 尝试在可用驱动程序列表中的连接字符串中指定驱动程序:
我尝试根据此说明安装 Microsoft ODBC Driver for SQL Server,但安装 gdal 时无法安装。错误是:
某些软件包无法安装。这可能意味着您请求了一种不可能的情况,或者如果您使用的是不稳定的发行版,一些必需的软件包尚未创建或已从 Incoming 中移出。以下信息可能有助于解决这种情况:
以下软件包具有未满足的依赖关系: msodbcsql:依赖:unixodbc-utf16 (>= 2.3.1-1) 但不会安装 E:无法纠正问题,您持有损坏的软件包。
一段时间后,我设法安装了 Microsoft ODBC 驱动程序,但这意味着要删除 GDAL。所以我可以拥有 GDAL 或 Microsoft ODBC 驱动程序。有没有办法解决这个问题?
谢谢你的帮助!
更新(2017.01.03):我找到了以下解决方案,并且我还评论了 MSDN 博客上的相应文章(到目前为止没有回复)here
如果还没有安装 UnixODBC
sudo apt-get install unixodbc unixodbc-dev
从某处下载:msodbcsql-11.0.2270.0.tar.gz(使用 msodbcsql-13.xxxtar.gz 可能会更好,但我找不到它)和
tar xvfz msodbcsql-11.0.2270.0.tar.gz
cd msodbcsql-11.0.2270.0
ldd lib64/libmsodbcsql-11.0.so.2270.0
如果缺少依赖项安装它们,在我的情况下可以这样做:(除了 apt-get install 之外的所有内容都是通过创建链接来修复文件的命名:)
sudo apt-get install libssl1.0.0 libssl-dev
cd /lib/x86_64-linux-gnu
sudo ln -s libssl.so.1.0.0 libssl.so.10
sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10
安装和清理:
sudo bash ./install.sh install --force --accept-license
rm -rf /tmp/msodbcubuntu
如果使用它的工具找不到驱动程序(例如 ogr2ogr 或 pyodbc),请编辑 /etc/odbcinst.ini 并为 [SQL Server] 创建一个连接器
[SQL Server]
Description=Microsoft ODBC Driver 11 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0
Threading=1
UsageCount=2