Ubuntu 17.10 + VsCode + Perl で Windows10 + SQL Server 2017 Express にアクセスする

Ubuntu 17.10 + VsCode + Perl で Windows10 + SQL Server 2017 Express にアクセスする

 

探し物をしていた時に、MS純正(?)のLinux用のSQLServerのドライバ+unixODBCの設定のドキュメントを見つけたので試してみる

Ubuntu 17.10 + Perl + DBI::DBD + unixODBC + msodbcsql17

<-> Windows10 + SQL Server 2017 Express

になるのかな?

※目的は?と聞かれても、そこに設定ドキュメントがあったから、としか言いようがないのだが(笑

CPANベースのモジュールを少し触ってみたかったからもある

Strawberry Perl では cpanm だって気が付いて、テストモジュールが入ってないけど、仕様が変わったのかな?

というのを確認したかったから、というのもある(変わったようですね)

※ただ UbuntuCPANモジュールをインストールした後のレイアウトが、まだ良くわからん

※出力パネルへのエラーメッセージの文字化けは、調査中かなぁ・・

 

参考にしたのは以下のサイト

ドライバー マネージャーのインストール

接続するODBCLinux と Mac Linux および macOS に Microsoft ODBC Driver for SQL Server をインストールする

SQL Server への接続

Can not connect to MS SQL from Ubuntu sqlcmd client

LinuxからSQL ServerにODBCで接続する

Ubuntu 17.10にmonoとVsCodeとGitをインストールしてみる

Windows 10 Pro + VsCode で Strawberry Perl を少し試してみる

cpanm - CPANからモジュールを取得、アンパック、インストールする

UTF-8を使用する

 

$ perl -v

This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-linux-gnu-thread-multi

(with 62 registered patches, see perl -V for more detail)

 

Ubuntuパッケージの追加(MSのドキュメントより)

# apt-get install unixodbc

# curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

 

#Ubuntu 14.04(バージョンに対応したもの のみ)

# curl https://packages.microsoft.com/config/ubuntu/14.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

 

#Ubuntu 16.04(バージョンに対応したもの のみ)

# curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

 

#Ubuntu 17.10(今回はこちら)

# curl https://packages.microsoft.com/config/ubuntu/17.10/prod.list > /etc/apt/sources.list.d/mssql-release.list

 

# apt-get update

# ACCEPT_EULA=Y apt-get install msodbcsql17

取得:1 https://packages.microsoft.com/ubuntu/17.10/prod artful/main amd64 msodbcsql17 amd64 17.1.0.1-1 [4,100 kB]

 

# optional: for bcp and sqlcmd (あったほうが便利)

# ACCEPT_EULA=Y apt-get install mssql-tools

 

----------------------------------------------------------------------

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

----------------------------------------------------------------------

とあるけど .profile に適当な場所(最下行)に /opt/mssql-tools/bin を追加する

PATH=/opt/mono/bin:/usr/bin:/opt/mssql-tools/bin:$PATH

source ~/.bashrc

 

# optional: for unixODBC development headers

# apt-get install unixodbc-dev

取得:1 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 autotools-dev all 20161112.1 [39.5 kB]

取得:2 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 libltdl-dev amd64 2.4.6-2 [162 kB]

取得:3 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 libtool all 2.4.6-2 [194 kB]

取得:4 http://jp.archive.ubuntu.com/ubuntu artful/main amd64 unixodbc-dev amd64 2.3.4-1 [215 kB]

・インストール先の確認

# ls /opt/microsoft/msodbcsql17/lib64/

libmsodbcsql-17.1.so.0.1

 

$ which sqlcmd

/opt/mssql-tools/bin/sqlcmd

 

SQL Server との接続を確認

対象データはこちらで作成したもの

 Excel VBA での Transaction について

Windows 10 のファイアウォールの確認

 windows10 + SQL Server2017 Expressでファイアウォールを設定する

SQL Serverのポートの確認

 Windows 10 Pro + JDK10 + LibreOffice 6.0.3.2 Base から SQL Server 2017 Express へ接続してみる

 

以下で接続可能であることを確認する

$ sqlcmd -S xxx.xxx.xxx.xx\SQLEXPRESS,1433 -U demo

 

・DSNの設定

/etc/odbc.ini

cat /etc/odbc.ini

[MSSQLTest]

Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1

Server = tcp:xxx.xxx.xxx.xxx\SQLEXPRESS

Trace = No

Database = DEMO

Port = 1433

ClientCharset = UTF-8

----------------------------------------------------------------------

・項目の説明

[MSSQLTest]

#ドライバーの説明

Description = SQL Server2017Express

#ドライバーの場所 

# ドライバーのフルパスか

Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1

#トレースするかの有無

Trace = No

#データベースのIPアドレス

Server = tcp:xxx.xxx.xxx.xxx\SQLEXPRESS

#データベース名

Database = DEMO

#ポート番号 SQL Serverは通常 1433

Port = 1433

#クライアント(Linux側)の文字コードセット

ClientCharset = UTF-8

----------------------------------------------------------------------

# odbcinst -i -d -f /etc/odbc.ini

odbcinst: Driver installed. Usage count increased to 1.

Target directory is /etc

  -i インストール

  -d ドライバー

  -f テンプレートファイル名

  

# odbcinst -q -d

[ODBC Driver 17 for SQL Server]

[MSSQLTest]

  -q 検索

  -d ドライバー

 

# odbcinst -u -d -n MSSQLTest

MSSQLTest has been deleted (if it existed at all) because its usage count became zero

  -u アンインストール

  -n ドライバー又はDSN名

 

DBI::DBDのインストール

コンソールより、以下を実行する

# apt-get install perl-doc

# apt install cpanminus

# cpanm install DBD::ODBC

# cpanm install DDP

# cpanm install DBI

# Windwows版よりドライバーの定義のみ変更
use strict;
use utf8;
use DBI;

my $dbh=DBI->connect('dbi:ODBC:MSSQLTest','demo','demo') or die $!;
my $sth=$dbh->prepare("select * from POSTAL") or die $dbh->errstr;

# 出力エラー対策
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;

$sth->execute or die $dbh->errstr;

while(my $arrayref = $sth->fetchrow_arrayref){
        use DDP;
        p $arrayref;
}

$sth->finish;
$dbh->disconnect;

[Running] perl "/home/tabizou/dev/perl/0002.pl"
\ [
    [0] "9200000 ",
    [1] undef,
    [2] "金沢市                               \0",
    [3] "以下に掲載がない場合          \0",
    [4] undef,
    [5] undef
]
~